{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 人工智能编程基础（试学班）\n",
    "\n",
    "## 项目：我的微信好友\n",
    "\n",
    "在这个notebook文件中，有些模板代码已经提供给你，但你还需要实现更多的功能来完成这个项目。除非有明确要求，你无须修改任何已给出的代码。以**'(练习)'**开始的标题表示接下来的代码部分中有你需要实现的功能。这些部分都配有详细的指导，需要实现的部分也会在注释中以'TODO'标出。请仔细阅读所有的提示。\n",
    "\n",
    "除了实现代码外，你还**需要**回答一些与项目及代码相关的问题。每个需要回答的问题都会以 **'问题 X'** 标记。请仔细阅读每个问题，并且在问题后的 **'回答'** 部分写出完整的答案。我们将根据 你对问题的回答 和 撰写代码实现的功能 来对你提交的项目进行评分。\n",
    "\n",
    ">**提示：**Code 和 Markdown 区域可通过 **Shift + Enter** 快捷键运行。此外，Markdown可以通过双击进入编辑模式。\n",
    "\n",
    "---\n",
    "\n",
    "### 让我们开始吧\n",
    "\n",
    "在这个项目中，你将通过开源的微信个人号接口 [itchat](http://itchat.readthedocs.io/zh/latest/) 来实现 Python 调用微信好友数据，并做一些有趣的统计和分析，最终分享给你的好友 :P\n",
    "\n",
    "### 项目内容\n",
    "\n",
    "我们将这个notebook分为不同的步骤，你将完成以下5个任务：\n",
    "\n",
    "**任务0 - 登陆微信，并通过向文件传输助手发送打招呼信息**\n",
    "\n",
    "**任务1 - 统计你的微信好友的男女比例**\n",
    "\n",
    "**任务2 - 分析微信好友的地域分布**\n",
    "\n",
    "**任务3 - 生成微信好友的签名词云图**\n",
    "\n",
    "**任务4 - 对签名进行情感分析**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 任务0. 登陆并发送打招呼信息\n",
    "\n",
    "### 登陆\n",
    "在这一个章节中，我们已经为你导入`itchat`这个包，并调用`login()`函数登陆网页微信，试试看运行以下代码，并扫描二维码以登陆网页微信。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "所有库导入成功！\n"
     ]
    }
   ],
   "source": [
    "### 以下内容无需改动，直接运行即可\n",
    "# 导入项目中所需要的包\n",
    "import itchat\n",
    "import pandas as pd\n",
    "import re\n",
    "import os \n",
    "import numpy as np\n",
    "import pinyin\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "print(\"所有库导入成功！\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Getting uuid of QR code.\n",
      "Downloading QR code.\n",
      "Please scan the QR code to log in.\n",
      "Please press confirm on your phone.\n",
      "Loading the contact, this may take a little while.\n",
      "Login successfully as JachinShen\n"
     ]
    }
   ],
   "source": [
    "# 调用login()函数以登录网页微信\n",
    "itchat.login()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 以下内容无需改动，直接运行即可\n",
    "# 读取数据\n",
    "dataset = itchat.get_friends(update=True)[0:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：打个招呼吧\n",
    "\n",
    "在这个章节中，我们将调用`itchat`的`send()`函数向文件传输助手`filehelper`发送一个打招呼信息吧！\n",
    "\n",
    "你需要完成以下内容：\n",
    " - 将想要发送的信息内容赋值给`message`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "### TODO：将信息内容赋值给message\n",
    "message = \"Hello World!\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<ItchatReturnValue: {'BaseResponse': {'Ret': 0, 'ErrMsg': '请求成功', 'RawMsg': '请求成功'}, 'MsgID': '923640590093338921', 'LocalID': '15309663007195'}>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 以下内容无需改动，直接运行即可\n",
    "# 发送消息\n",
    "itchat.send(message, 'filehelper')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "打开手机微信端的文件传输助手，看看是否收到了这条信息，并回答以下问题。\n",
    "\n",
    "### **问题1**\n",
    "message 的变量类型是什么？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答**：字符串"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "LOG OUT!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<ItchatReturnValue: {'BaseResponse': {'ErrMsg': '请求成功', 'Ret': 0, 'RawMsg': 'logout successfully.'}}>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 退出登陆\n",
    "itchat.logout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 任务1. 好友男女比例"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "根据我们希望探索的问题，需要从数据集中取出以下几个部分：\n",
    "- NickName：微信昵称\n",
    "- Sex：性别，1表示男性，2表示女性\n",
    "- Province：省份\n",
    "- City：城市\n",
    "- Signature：微信签名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 以下内容无需改动，直接运行即可\n",
    "def preprocess_data(dataset):\n",
    "    \n",
    "    data = [{'NickName': item['NickName'], \n",
    "            'Sex': item['Sex'], \n",
    "            'Province': item['Province'], \n",
    "            'City': item['City'], \n",
    "            'Signature': item['Signature']} for item in dataset]\n",
    "    \n",
    "    return data\n",
    "\n",
    "pre_data = preprocess_data(dataset)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：打印数据\n",
    "* 打印`pre_data`的数据类型\n",
    "* 打印`pre_data`中的第一条数据，以及其数据类型。\n",
    "* 打印`pre_data`中第一条数据的微信昵称"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'list'>\n"
     ]
    }
   ],
   "source": [
    "### TODO：打印pre_data的数据类型\n",
    "print(type(pre_data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'NickName': 'JachinShen', 'Sex': 0, 'Province': '', 'City': '', 'Signature': '我爱学习'}\n",
      "<class 'dict'>\n"
     ]
    }
   ],
   "source": [
    "### TODO：打印第一条数据及数据类型\n",
    "print(pre_data[0])\n",
    "print(type(pre_data[0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "JachinShen\n"
     ]
    }
   ],
   "source": [
    "### TODO：打印第一条数据的微信昵称\n",
    "print(pre_data[0]['NickName'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### **问题2**\n",
    "pre_data的数据类型是什么？pre_data中第一条数据的数据类型呢？根据你的理解，这两种数据类型的区别是什么？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回答：pre_data的数据类型是列表，pre_data中第一条数据的数据类型是字典。\n",
    "\n",
    "列表和字典的区别:\n",
    "- 列表通过整型数字索引，字典通过键值索引\n",
    "- 列表更注重于数据的顺序，数据相互之间是有序的，字典更注重键到值的映射，数据之间是无序的"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：统计男女比例\n",
    "- 统计好友性别，分为男性、女性与未知三种，赋值到已经定义好的`sex`字典中。\n",
    "\n",
    "提示：\n",
    "- `pre_data`中1表示男性、2表示女性；\n",
    "- 数据需要从第1条开始计算，因为第0条是自己。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# TODO：统计好友性别\n",
    "sex = {\n",
    "    'male': 0,\n",
    "    'female': 0,\n",
    "    'unknown': 0\n",
    "}\n",
    "for friend in pre_data[1:]:\n",
    "    if friend['Sex'] == 1:\n",
    "        sex['male'] += 1\n",
    "    elif friend['Sex'] == 2:\n",
    "        sex['female'] += 1\n",
    "    else:\n",
    "        sex['unknown'] += 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "我的好友中共有 93 位男性、 20 位女性，有 31 位好友未填写。\n"
     ]
    }
   ],
   "source": [
    "### 以下内容无需改动，直接运行即可\n",
    "print(\"我的好友中共有\", sex['male'],\"位男性、\", sex['female'], \"位女性，有\", sex['unknown'], \"位好友未填写。\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 以下内容无需改动，直接运行即可\n",
    "plt.figure(figsize=(8,5), dpi=80)\n",
    "plt.axes(aspect=1) \n",
    "plt.pie([sex['male'], sex['female'], sex['unknown']],\n",
    "        labels=['Male','Female','Unknown'],\n",
    "        labeldistance = 1.1,\n",
    "        autopct = '%3.1f%%',\n",
    "        shadow = False,\n",
    "        startangle = 90,\n",
    "        pctdistance = 0.6 \n",
    ")\n",
    "\n",
    "plt.legend(loc='upper left',)\n",
    "plt.title(\"My Wechat Friends' Sex Ratio\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这段代码的作用是绘制饼图，是不是很有趣？\n",
    "\n",
    "**饼状图**是一种常见的单变量图形，用于描绘分类变量级别的相对频率。饼图中的频率用圆形的扇区表示：角度或面积越大，该分类值就越常见。\n",
    "\n",
    "在「人工智能编程基础」这门课的第二章节中，将讲解如何使用`matplotlib`和`seaborn`绘制各种统计图表，进行数据可视化。\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 任务2. 好友地域分布\n",
    "### 练习：统计好友省份\n",
    "使用`list`中`append()`方法将好友省份添加至`province`中，注意要去除空的字符串\n",
    "\n",
    "提示：可以用`for`循环实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "### TODO：将好友所在省份（不为空）添加到 province 中\n",
    "province = []\n",
    "for friend in pre_data[1:]:\n",
    "    if friend['Province']:\n",
    "        province.append(friend['Province'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "province = [pinyin.get(i, format=\"strip\", delimiter=\"\") for i in province if i != '']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7fc4a971b550>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAE5CAYAAACApdvhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcVOWd7/HPF1EgoqhIDCMxSEQUWbVpF0wUNS6JUa+jGK9xC4q5iVFnvEadOxrHSTJqTIwySVzimrjiEokm445GTVhacMUN4oIrLqhxZfndP84pqIZuuumuPuf06e/79eJF1anl/KCqvvXUc57nOYoIzMys8+uWdwFmZlYbDnQzs5JwoJuZlYQD3cysJBzoZmYl4UA3MysJB7qZWUk40M3MSsKBbmZWEg50M7OS6J7lzjbccMMYOHBglrs0M+v0Ghoa3oqIfi3dL9NAHzhwIDNnzsxyl2ZmnZ6kF1tzP3e5mJmVhAPdzKwkHOhmZiWRaR+6ma3aokWLmD9/Pp988knepVgOevbsyYABA1hzzTXb9HgHulmBzJ8/n3XWWYeBAwciKe9yLEMRwdtvv838+fPZdNNN2/Qc7nIxK5BPPvmEvn37Osy7IEn07du3Xb/OHOhmBeMw77ra+9o70M2sEUmceOKJy66fe+65nHHGGTV57iOOOIIbb7yxJs+1KpMnT2bLLbdk3Lhxjba/8MIL9OrVi1GjRi3789lnn630+JkzZ3LcccfVpJYrrriCY489tibP1ZJW9aFLegH4AFgCLI6IOkkbANcDA4EXgPER8W57ihl4yu3teTgAL5z1jXY/h1lR1OIzUa01n48ePXpw8803c+qpp7LhhhvWdP/tsXjxYrp3b91hv0svvZRLLrmEHXfccaXbvvzlLzN79uxV7qeuro66uro215qX1Wmhj4uIURFR+VeeAtwTEYOBe9LrZtbJde/enYkTJ3LeeeetdNuKLezevXsDMHXqVHbaaSf23XdfBg0axCmnnMLVV19NfX09w4cPZ+7cucsec/fdd1NXV8fmm2/ObbfdBsCSJUs46aSTGDNmDCNGjOCiiy5a9rxf+cpX2GeffRg6dOhK9Vx77bUMHz6cYcOGcfLJJwNw5pln8uCDDzJhwgROOumkVv2bzzjjDA499FDGjh3LoYceytSpU9l7770B+PDDD/nOd75DfX09o0eP5tZbbwWSlvf+++/PnnvuyeDBg/nhD3+47Pkuv/xyNt98c+rr63nooYeWbZ88eTLDhg1j5MiRfPWrX21VbaujPaNc9gV2Ti9fCUwFTm5nPWZWAN///vcZMWJEo5BqyaOPPsqcOXPYYIMNGDRoEEcddRTTp0/n/PPPZ9KkSfzyl78Ekm6P6dOnM3fuXMaNG8fzzz/PVVddRZ8+fZgxYwaffvopY8eOZffddwfgkUce4Yknnlhp5Merr77KySefTENDA+uvvz677747f/jDHzj99NO59957Offcc5tsZc+dO5dRo0YBMHbsWH71q18B8NRTT/Hggw/Sq1cvpk6duuz+P/nJT9hll1247LLLWLhwIfX19ey2224AzJ49m1mzZtGjRw+GDBnCD37wA7p3786PfvQjGhoa6NOnD+PGjWP06NFA8mVzxx13sPHGG7Nw4cJW/9+2VmsDPYA7JQVwUURcDGwUEa+lt78ObFTz6swsF+uuuy6HHXYYF1xwAb169WrVY8aMGUP//v2BpFujEsjDhw/nvvvuW3a/8ePH061bNwYPHsygQYN4+umnufPOO3nssceWtf7fe+89nnvuOdZaay3q6+ubHMY3Y8YMdt55Z/r1S9asOuSQQ3jggQfYb7/9Vllnc10u++yzT5P/1jvvvJMpU6Zw7rnnAslIpJdeegmAXXfdlT59+gAwdOhQXnzxRd56661GdR100EE8++yzQPIFcsQRRzB+/Hj233//VdbZFq0N9B0j4hVJnwfukvR09Y0REWnYr0TSRGAiwCabbNKuYs0sOyeccAJbb701Rx555LJt3bt3Z+nSpQAsXbq00QHFHj16LLvcrVu3Zde7devG4sWLl9224kgOSUQEkyZNYo899mh029SpU1l77bVr949aheb2ExHcdNNNDBkypNH2adOmNfo3r7HGGo3+nU258MILmTZtGrfffjvbbLMNDQ0N9O3bt/3Fp1rVhx4Rr6R/vwncAtQDb0jqD5D+/WYzj704Iuoioq7yjWVmxbfBBhswfvx4Lr300mXbBg4cSENDAwBTpkxh0aJFq/28kydPZunSpcydO5d58+YxZMgQ9thjD37zm98se75nn32WDz/8cJXPU19fz/33389bb73FkiVLuPbaa9lpp51Wu56W7LHHHkyaNImIpM06a9asVd5/22235f777+ftt99m0aJFTJ48edltc+fOZdttt+XMM8+kX79+vPzyyzWttcVAl7S2pHUql4HdgSeAKcDh6d0OB26taWVmlrsTTzyRt956a9n1o48+mvvvv5+RI0fy17/+tU2t50022YT6+nr22msvLrzwQnr27MlRRx3F0KFD2XrrrRk2bBjHHHNMi63d/v37c9ZZZzFu3DhGjhzJNttsw7777rva9bTktNNOY9GiRYwYMYKtttqK0047rcW6zjjjDLbffnvGjh3Llltuuey2k046adlB3B122IGRI0fWtFZVvnWavYM0iKRVDkkXzTUR8RNJfYEbgE2AF0mGLb6zqueqq6uLVa2H7mGL1tXNmTOnUQBY19PUe0BSQ9UIw2a12IceEfOAlb5GIuJtYNfVqNPMzDqQZ4qamZWEA93MrCQc6GYF09JxLSuv9r72DnSzAunZsydvv/22Q70LqqyH3rNnzzY/h09wYVYgAwYMYP78+SxYsCDvUiwHlTMWtZUD3axA1lxzzTafrcbMXS5mZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYQD3cysJBzoZmYl4UA3MysJB7qZWUk40M3MSsKBbmZWEg50M7OScKCbmZWEA93MrCQc6GZmJeFANzMrCQe6mVlJONDNzErCgW5mVhIOdDOzknCgm5mVhAPdzKwkHOhmZiXhQDczK4lWB7qkNSTNknRben1TSdMkPS/peklrdVyZZmbWktVpoR8PzKm6fjZwXkRsBrwLTKhlYWZmtnpaFeiSBgDfAH6bXhewC3Bjepcrgf06okAzM2ud1rbQfwn8EFiaXu8LLIyIxen1+cDGNa7NzMxWQ4uBLmlv4M2IaGjLDiRNlDRT0swFCxa05SnMzKwVWtNCHwvsI+kF4DqSrpbzgfUkdU/vMwB4pakHR8TFEVEXEXX9+vWrQclmZtaUFgM9Ik6NiAERMRD4FnBvRBwC3AcckN7tcODWDqvSzMxa1J5x6CcD/yrpeZI+9UtrU5KZmbVF95bvslxETAWmppfnAfW1L8nMzNrCM0XNzErCgW5mVhIOdDOzknCgm5mVhAPdzKwkHOhmZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYQD3cysJBzoZmYl4UA3MysJB7qZWUk40M3MSsKBbmZWEg50M7OScKCbmZWEA93MrCQc6GZmJeFANzMrCQe6mVlJONDNzErCgW5mVhIOdDOzknCgm5mVhAPdzKwkHOhmZiXhQDczK4kWA11ST0nTJT0q6UlJ/5Fu31TSNEnPS7pe0lodX66ZmTWnNS30T4FdImIkMArYU9J2wNnAeRGxGfAuMKHjyjQzs5a0GOiR+Ed6dc30TwC7ADem268E9uuQCs3MrFVa1YcuaQ1Js4E3gbuAucDCiFic3mU+sHHHlGhmZq3RqkCPiCURMQoYANQDW7R2B5ImSpopaeaCBQvaWKaZmbVktUa5RMRC4D5ge2A9Sd3TmwYArzTzmIsjoi4i6vr169euYs3MrHmtGeXST9J66eVewNeAOSTBfkB6t8OBWzuqSDMza1n3lu9Cf+BKSWuQfAHcEBG3SXoKuE7Sj4FZwKUdWKeZmbWgxUCPiMeA0U1sn0fSn25mZgXgmaJmZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYQD3cysJBzoZmYl4UA3MysJB7qZWUk40M3MSsKBbmZWEg50M7OScKCbmZWEA93MrCQc6GZmJeFANzMrCQe6mVlJONDNzErCgW5mVhIOdDOzknCgm5mVhAPdzKwkHOhmZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYQD3cysJFoMdElflHSfpKckPSnp+HT7BpLukvRc+vf6HV+umZk1pzUt9MXAiRExFNgO+L6kocApwD0RMRi4J71uZmY5aTHQI+K1iHgkvfwBMAfYGNgXuDK925XAfh1VpJmZtWy1+tAlDQRGA9OAjSLitfSm14GNalqZmZmtllYHuqTewE3ACRHxfvVtERFANPO4iZJmSpq5YMGCdhVrZmbNa1WgS1qTJMyvjoib081vSOqf3t4feLOpx0bExRFRFxF1/fr1q0XNZmbWhNaMchFwKTAnIn5RddMU4PD08uHArbUvz8zMWqt7K+4zFjgUeFzS7HTbvwFnATdImgC8CIzvmBLNzKw1Wgz0iHgQUDM371rbcszMrK08U9TMrCQc6GZmJeFANzMrCQe6mVlJONDNzErCgW5mVhIOdDOzknCgm5mVhAPdzKwkHOhmZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYQD3cysJBzoZmYl4UA3MysJB7qZWUk40M3MSsKBbmZWEg50M7OScKCbmZWEA93MrCQc6GZmJeFANzMrCQe6mVlJONDNzErCgW5mVhIOdDOzknCgm5mVRIuBLukySW9KeqJq2waS7pL0XPr3+h1bppmZtaQ1LfQrgD1X2HYKcE9EDAbuSa+bmVmOWgz0iHgAeGeFzfsCV6aXrwT2q3FdZma2mtrah75RRLyWXn4d2Ki5O0qaKGmmpJkLFixo4+7MzKwl7T4oGhEBxCpuvzgi6iKirl+/fu3dnZmZNaOtgf6GpP4A6d9v1q4kMzNri7YG+hTg8PTy4cCttSnHzMzaqjXDFq8F/goMkTRf0gTgLOBrkp4Ddkuvm5lZjrq3dIeIOLiZm3atcS1mZtYOnilqZlYSDnQzs5JwoJuZlYQD3cysJBzoZmYl4UA3MysJB7qZWUm0OA69Kxp4yu3tevwLZ32jRpWYmbWeW+hmZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYTHoRdUe8fCg8fDm3U1bqGbmZWEA93MrCQc6GZmJeE+dFulIqxr4+MJZq3jFrqZWUk40M3MSsKBbmZWEu5DN2slH0+oXR1FqKFWdRSJW+hmZiXhQDczKwkHuplZSbgP3cysHYpwPKHCLXQzs5JwoJuZlYQD3cysJNoV6JL2lPSMpOclnVKroszMbPW1OdAlrQH8CtgLGAocLGlorQozM7PV054Wej3wfETMi4jPgOuAfWtTlpmZra72BPrGwMtV1+en28zMLAeKiLY9UDoA2DMijkqvHwpsGxHHrnC/icDE9OoQ4Jm2lwvAhsBb7XyO9ipCDVCMOlzDckWoowg1QDHqKEINUJs6vhQR/Vq6U3smFr0CfLHq+oB0WyMRcTFwcTv204ikmRFRV6vn66w1FKUO11CsOopQQ1HqKEINWdfRni6XGcBgSZtKWgv4FjClNmWZmdnqanMLPSIWSzoWuANYA7gsIp6sWWVmZrZa2rWWS0T8CfhTjWpprZp137RDEWqAYtThGpYrQh1FqAGKUUcRaoAM62jzQVEzMysWT/03MysJB7qZWUl4PfROQtJhTW2PiKuyrsXMismB3gJJ60bE+5I2aOr2iHgno1LGVF3uCewKPAI40HMiaf8mNr8HPB4Rb2ZdT14kbRERT0vauqnbI+KRDGvJ/TXJs4bCHhSV9GBE7CjpA6C6SAEREetmVMdtEbG3pL+ndajq5oiIQVnU0URd6wHXRcSeOez7cRq/JpC8YWcCP46It7tIDbcD2wP3pZt2BhqATYEzI+J3Hbz/onxGLo6IiZLua+LmiIhdsqgjrSXX1yTvGgob6LZqktYEnoiIITns+xxgCXBNuulbwOeA14EdI+KbXaSGO4DDIuKN9PpGJL+YDgYeiIhhHV2DNVaE1yTPGjpNl4ukz5N0NQAQES9lvH8BhwCbRsR/StoE+EJETM9o/39keSusG8mSxTdkse8m7BYR1T+vH5f0SERsLenbXaiGL1Y+tKk3023vSFqUUQ1I2i0i7l5h2+ERcWVWNaT7LMJxniK8JrnVUPhAl7QP8HPgn0j+Y74EzAG2yriUXwNLgV2A/wQ+AG6icd92Rzq36vJi4MWImJ/Rvle0hqT6ypeZpDEks4UrtXWVGqZKug2YnF7/53Tb2sDCjGoAOF3SPwP/F+gN/Bb4FMg00CnGcZ4ivCa51VD4LhdJj5KE6N0RMVrSOODbETEh4zoqrb9ZETG6UltEjMxo/2sDH0fEUkmbA1sAf46IzFqCVbWMAS4jCQ8B7wNHAU8C34iIDv/lUJAaRPJhHZtuegi4KTL+UKV1nAgck246PSKuzbKGpuRxnKcIr0meNXSGQJ8ZEXVpsI9OAy2zIK2qYxqwAzAjDfZ+wJ2VcM9g/w3AV4D1Sd4gM4DPIuKQLPbfTE19ACLiva5cQ97SEVgXAuuSrHr6e+DsrL9Ymqgrt+M8XVXhu1yAhZJ6Aw8AV0t6E/gwhzouAG4BNpL0E+AA4N8z3L8i4iNJE4BfR8Q5kmZnuP/lhUg9SFogA4HuSYMEIuLMLlbD/sDZwOdJfiVkOrqkyt+AsyLiMkm90poeImmAZKYIx3mK8JrkWUNnaKGvDXxC8p9yCNAHuDqLYWlN1LIFSb8gwL0RMSfDfc8CvgecB0yIiCclPR4Rw7OqoaqW/yEZIthAMtIEgIj4eRer4Xngm1m+D5qpY5MVBwlI+mpEPJBxHTtVXc3lOE8RXpM8ayh8Cz0iqlvjWR/kWdHnSA68BdAr432fAJwK3JKG+SCWj3PN2oA8xr8XsIY38g5zSEZ8SdqYZMBAbp/piLg/r31XKcJrklsNnaGFnvtPqLSO04EDSUa2CNgPmBwRP86yjiKQdDEwKSIe7+I1nA98AfgDyagSACLi5ozrOBs4CHiK5b9WIiL2ybiO3D+rRXhN8qyhMwR67j+h0jqeAUZGxCfp9V7A7KwO+KzQP1lRmRl5UaWujGp5CtgM+DvJG7bywR3RxWq4vInNERHfyaqGtI5ngBER8WmLd+7YOnL/rBbhNcmzhsJ3uVCMn1AAr5KMra0EZw+aOIdqB5oH9AMqw9EOIhkLvzlwCXBohrXsleG+mpN7DRFxZN41pOYBa1LVGsxJ7p/VIrwmedZQ2ECvWuBmpqTryeknlKRJJC3j94AnJd2VXv8akMks0dQOEVE9ceOPkmZExBhJmZz6T+lCZSRfJLmKiBcljSQZygnwl4h4NIt9S/phOsqo8t5YsbbjsqijykfAbEn30PgzkkkdRfmsprUMACaxfAz4X4Djszw4K6knMIFk8mP17PYu3UKvXovjI2D3qusBZPUmmZn+3UAybLFiakb7r+hdPZohXXqgd3rbZxnVcA2wN8n/xUoLlQGZLVQm6XjgaJa/D36vZJGoSRnsvtIKnbnKe2VnCvmeoL0on1WAy0nepwem17+dbvtahjX8Dnga2AM4k2R0Xia/XArfh24JSV8nmTwylyRINyUZxjgVODoifplfddmT9BiwfWUUVDq89a9Z9qFb8UiaHRGjWtrWwTXMSme1PxYRI9IJVn+JiO06et9FbqEDIOmCJja/B8yMiFszrKOyfG4jkdHyuRHxJ0mDSab8AzxTdSA0kzDXqte9DuCdiHgxi1pIvtSWVF1fQuNfDB1fQNMHqpfJapRJ+r74L5KJPNU/8TNd2jmdPX006WSvqjqyPEj8tpLF2SrHmg4Gsp6zUlmOY6GkYSQrgH4+ix0XPtBJ3qBb0Hihm78DIyWNi4gTMqqjboWaDgSaPOlFB9qG5R+WkZKyXsnuRJIPbHOTd/qmyzJkcYD2cmCapEo32H7ApRnst9o8kuFpv0+vHwy8QdKHnKXLgR+RTDobBxxJPqeXvJWkz/puGn/ZZuk7JH3o55F82T5M8v+RpYslrQ+cRtIV1hs4PYsdF77LRdLfgLERsSS93p3kTbMjyRlAhuZYW0NEbJPRvn4HfBmYTeOxxlkfgFslSXdGxO4t37Mm+9qa5H0AyU/aWVnst2r/MyOirqVtGdTREBHbVM8czvK9WVVHpl0btrLO0EJfn+QbrrL40trABhGxRFJmw7RW6GboRtJiz/L/rw4YmueCS5J2iYh71fQptoiImzs6zNX4VIAvpH+W3RbZnRIQYG1JgyJiXrr/TUnen1n7VFI34DlJx5IMp+3dwmM6wm2Svh4Rf8p6x82NOKrIouEj6dsR8XtJ/9pMDb/o6Bo6Q6CfQzIkaypJH+lXgZ+mB8HuXtUDa+znLH/DLCYJkgObvXftPUHy8/61DPe5op2Ae2k8qqEiq9EM1SNsNgHeTS+vB7xEcrA4K/9Css71vLSGL7F8CdssHU+yLMVxJGv17wIcnlMd/5Y2tBaR7UzRyoijsSTHEq5Prx9IMoM2C5Uv83Uy2t9KCt/lAiCpP1CfXp0REa/mUENPqlb3SzdHZLS6n5LzNY4iGftePcY30+ndRSHpEpJ1bf6UXt8L2C8iMg3UdNXHyoHqp/OerZm39BfUYBofnM1sjZe0i3bHiFicXs9shEkRdIYWOiRdHAtI6t1M0mZZryRHcqBrIckZWDKbZl/ljBz22SQl50j8KfBPEbGXpKEkQwizPCi5XUQcXbkSEX9Wcp7RzDTR9fRlSZmeYT6tY3PgJFZYnCsyPDlzWsdRJK30ASTHerYjOSi566oeV2Prk6wLX+l6651u63AtTDiLtKbfR8Tcjqqh8IFetfDQkySngIPkPyfrQM91db+CrGRXcQXJyIr/l15/luQnbpaB/qqkf2f5CJNDSJZnyNIEkrO730vSvbAz6dndJWVyhvnUZJI5CpeQ3+gSSMJ8DPC3iBinZLnpn2Zcw1nArPQXbaWL9oyM9t3ShLO+JN2SHXZynsIHOslwtCEF+Cn7sKThea3uJ2k7kuFYWwJrkSzj+2HWq06mNoyIGySdChARiyVlHSQHkwzVqwxbfCDdlqXuwJax8tndt03rySrQF0fEbzLa16p8EhGfSEJSj3TOQqZnK4qIyyX9meQ1ADg5Il7PaN9/TP++EkDS5yLio+r7SOrQk/N0hkDPdeEhSY+T/CLoDhyZHgDLY3W//wa+RdIaqwMOI1mYKw8fSupL+rMy/bLJ9BRw6WiW47PcZxNyPcN81YifP0r6HsmXW/XxlSxH/ADMV3Ie0T8Ad0l6F8hqolm1NVjeRbu5pM2z7KKVtD3Jr9XewCbpmkPHRMT3IuKiDt130Q+KSrqJ5CdKXgsPfWlVt2c1M1LLz636WOVLRFUnrM5SOoRzEsniQ0+SrAJ5QEQ8lmENuS8nLOnXJCNtqie9zSfpz74tIsZ18P4rs5dXXFMnuZDxTNFqSs5e1Af4n4jIaq2hZrtosxw8oOT8wwcAU2L5CeWfiIhhHb3vztBCz3XhoQynsrfkI0lrkQzhPIdk+GIeswEhGQZ2C8lCTB+QtMiezbiGIiwn/H0an939Kpaf3b1DwxwgIjYFkDSeJDjfl3QasDXJ8MXc5HjMpxBdtBHxstRoJYpMuiQL30K3RPpL4U2S7qd/IWn9/Doins+hlhuA94Gr003/G1gvIjIbl6906eCmtkl6MiK2yqqWvFUtArUjSZCfC5weEdu28NDSSfvPD4yIf+RYw43AL0i6Sbcl6Rqsi4hvdfS+C99CL8rCQ3mr+qXwMfAfedYCDFthyYX7lJxBKEu5LyesApxyLVVp/X0DuCQibpfU5U6NmMp1bfjUd4HzgY1JZu3eSfJrrsMVPtApzsJDuZB0Q0SMrzo4q+q/MzwoW+0RSdtFxN/SGrcl+7XBTwQelNRoOeF0BnFWJxM/hwKcHhF4RdJFJGt+n51Oduoyn5EV5L02PBHxFskw2swVvsulKAsP5UXSFyLi9bTLpfrFqgT6SxnWUvlSWRMYQjLVPkgmtDyd9UJpK8zSrF5OOKv9PxQRY1u+Z4fX8TlgT5IJTc+lM6uHR8SdOZfWJSnHZYQ7Qwu9KAsP5eVGkhUFn6CJ2WeS3gF+FhG/zqCWvTPYx+rIeznh3E+5lu7vI6rW0YmI18h3zZ/cFKSLNrdlhDtDC30MyQys9UgO+PQBzqn83O/q0vHgD0dEphM48qYCLCesApxh3hqT9CDLu2i/SdpFGxGZrEee1pDbMsKFD3RrmaT+aausy5A0h5yXE7biKUIXbXpA+uHIYRnhwne5FGXhoSLramGeyn05YRXgDPO2kty6aCV9wPJu0X+T9BnJiKvMRj8VPtApzsJDViwbAk9JynM54SKcYd4ay21t+IhYB0DSvcDPI+L2ym3pcs8drvBdLl1pRIu1Xjq1fCVZzlBsqq80z/5TK4Z0vaeXgXsiPV+CpEcioqmTq9dUYVvoBVx4yAqkIMsJF+EM81alIF20C0nWgL8gXXPo21ntuLAt9CIvPGT5K8JywuncgEkka6JXzjB/XJZzA6wxSY+SdNE2UNVFGxENGdawbNE8SUeQTIJbPyIGdPS+C9tCL/LCQ1YIuS8nnC7H0CVPAVhgRVgb/sLKhYi4Ip2Ql8nU/8K20Cu88JA1pQjLCec5I9Aaq+qiPY5kEbsu2UVb2BZ6FS88ZE0pwnLCuc0ItJU00LiL9iQaz6zuEl20naGFfhvJWNKvkXS3fAxMj4gOOy+fFV8RlhP2iJbiaa6LNiIeybm0THSGQPfCQ1ZIec4ItKZ19S7awge6WVOqRkE1ksXopxVmBPYmmQ2Y6YxAa1rlOIqk/yJpBF6T16ka89AZ+tDNmlJXdbknyWzNDZq5b00VYUagNatLrw3vFrqVRg6LMOU2I9Ca1tW7aN1Ct05JUnVodiNpsWf9fs5tRqA1rauvDe9At87q5yzvx14MvMDyRbKyoohYTHLquyOAB4H1M67NjFtjAAACt0lEQVTBbBkHunVWt9F43HEAX5H0uYiYnVENuc0INGuK+9CtU5J0DUk3yxSSUN8beIxk1ubkiDgnv+rM8uFAt05J0gPA1yPiH+n13sDtJAfEGrI+YbVZEXSZ4TxWOp+naq0OYBGwUUR8vMJ2sy7DfejWWV0NTJN0a3r9m8A1ktYGnsqvLLP8uMvFOi1JdSw/n+dDETEzz3rM8uZANzMrCfehm5mVhAPdzKwkHOjWKUlaImm2pCckTU7X8KjF8z5ci+cxy4MD3TqrjyNiVEQMI1m69rvVNyqx2u/viNihVgWaZc2BbmXwF2AzSQMlPSPpKuAJ4IuSDpb0eNqSPxtA0ncl/azyYElHSPrv9HJlotLOkqZKulHS05KulqT0tjGSHpb0qKTpktaRtIakn0maIekxScdk/r9gXZ4D3To1Sd2BvYDH002DSU5FtxXJZKOzgV2AUcAYSfsBNwH/q+ppDgKua+LpRwMnAENJzkk5Nj2P6fXA8elpEHcjOS3iBOC9iBgDjAGOlrRpLf+tZi1xoFtn1UvSbGAm8BJwabr9xYj4W3p5DDA1IhakqyJeDXw1IhYA8yRtJ6kvsAXwUBP7mB4R8yNiKTCbZJ2YIcBrETEDICLeT597d+CwtKZpQF+SLxezzHimqHVWH694gua0R+TDVj7+OmA88DRwSzQ9IaN6CYElrPrzIuAHEXFHK/dvVnNuoVuZTQd2krShpDWAg4H709tuAfZNtzXV3dKcZ4D+ksYApP3n3YE7gP8jac10++bpMgRmmXEL3UorIl6TdApwH0kL+vaIuDW97V1Jc4ChETF9NZ7zM0kHAZMk9SLpP98N+C1Jl8wj6cHTBcB+Nf0HmbXAU//NzErCXS5mZiXhQDczKwkHuplZSTjQzcxKwoFuZlYSDnQzs5JwoJuZlYQD3cysJP4/wws2T9PR6bQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "province = pd.DataFrame(province)\n",
    "province.columns = ['Province']\n",
    "province['Number of Friends'] = 1\n",
    "province.groupby('Province').sum().sort_values('Number of Friends', ascending=False)[:10].plot.bar()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**条形图**用于描述分类变量的分布情况。在条形图中，分类变量的每个级别用长条表示，高度表示数据在该级别的出现频率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 任务3. 生成好友个性签名词云图\n",
    "\n",
    "在这里我们希望生成词云，只需要调用第三方库即可，Python有大量的库可以使用，能极大提高开发效率，是编程入门的绝佳选择。\n",
    "\n",
    "### 练习：打印个性签名\n",
    "* 使用`print()`语句打印出自己的个性签名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "我爱学习\n"
     ]
    }
   ],
   "source": [
    "### TODO：打印自己的个性签名\n",
    "print(pre_data[0][\"Signature\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "from wordcloud import WordCloud\n",
    "import jieba\n",
    "\n",
    "tList = []\n",
    "for i in pre_data:\n",
    "    signature = i[\"Signature\"].replace(\" \", \"\").replace(\"span\", \"\").replace(\"class\", \"\").replace(\"emoji\", \"\")\n",
    "    rep = re.compile(\"1f\\d.+\")\n",
    "    signature = rep.sub(\"\", signature)\n",
    "    if len(signature) > 0:\n",
    "        tList.append(signature)\n",
    "    \n",
    "text = \"\".join(tList)\n",
    "\n",
    "wordlist_jieba = jieba.cut(text, cut_all=True)\n",
    "wl_space_split = \" \".join(wordlist_jieba)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAASgAAAD8CAYAAADE3zmUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnWd4VNUWht8pmfSQhBB6gNCbIL1IFaWLNJEOUqVIL4IIKCK9iCBSlCa9ixQFRDrSSwIBQkkICQnpbfq+P4ZMcjKTBBA1eM97n3nunN3OOZF82XvttddSCCGQkZGRyY0o/+0HkJGRkckKWaBkZGRyLbJAycjI5FpkgZKRkcm1yAIlIyOTa5EFSkZGJtciC5SMjEyuRRYoGRmZXIssUDIyMrkW9b/9AM+Q3dllZP57KP7qAPIMSkZGJtciC5SMjEyuRRYoGRmZXIssUDIyMrkWWaBkZGRyLbJAycjI5FpkgZKRkcm1yAIlIyOTa5EFSkZGJtciC5SMjEyuRRYoGRmZXIssUDIyMrkWWaBkZGRyLbJAycjI5FpkgZKRkcm1yAIlIyOTa5EFSkZGJtciC5SMjEyuRRYoGRmZXIssUDIyMrkWWaBkZGRyLbJAycjI5FpkgZKRkcm1yAIlIyOTa5EFSkZGJtciC5SMjEyuRRYoGRmZXIssUDIyMrkWWaBkZGRyLbJAycjI5FpkgZKRkcm1yAIlIyOTa5EFSkZGJtciC5SMjEyuRRYoGRmZXIssUDIyMrkWWaBkZGRyLbJAycjI5FpkgXoNGfHpZuv3ew+imDH/F55EJVjLp3y9hwtXHrBh61kAvpy3j9N/Blv7Hj9922bMGzERWd7PYDYx+fwBSdnSwFM27dbePo9JCOu13mx6gbeSkbFF/W8/gMzL06H3MnauHYJKpSR/Pg9r+ZeftiPyaSLHz9xBCJgytg0jJ2+hXq2SANSqXkIyTp3di3F3cMJRpQJgxzt92B96k013L0vajTyzh0V12zH5/AE6+b8BQIsDKznYcgBmIXivWEVUCgURKYkAeDo6/23vLvP/gTyDeo3ZsnoQJpOZT0e2lJTHxCYzd8khurxfg627zwMwrH8TzGbL7GbU5K2S9lqTERcHB1RKJSqlEkeVmvbFK2MWgq3NetHKrzzdS1djQZ33APiqZkt8HF1pdXAVB1sOAECpUJBg0AGw++ENzkY+5ET4vb/1/WX++yhEhin5v0iueIj/V+rtWcLpdsPt1rU6uIq+ZWrS2q8CLmoHAKZf+pXhFd/ig8Pr8HZ0IVqXwpHWgymz5Wtm1WrD5uDLxOlTCUmK49YHE/7JV5HJXSj+6gDyEk/GLgGxEey8f539LfoD0PbQalY06ExBFw/KeORDZzKiVCgo4e7N1ma90JtNFHPzxs/N819+cpn/ErJA5WIW3eqAAiUCMwqU6MwpaJTO1Mzbgfr5uqMzJQPgqHK19pkT2JLxFSwG7Xk32+CgcLIZt33Rz/FzfcN6rTMbJfU6k5GKXgWo6FWASef3M7NmK35u3s9arzUZGHv2Z1r7VWBEpQYAaJQqdGYjhmeGcU+NMyHEvaKfhMz/K/ISL5diEgZUCsuSKloXSl7HoiwJ6sLwslswCSMqhZpoXSgALuo8pJoSUSnUfH+nDx+VXI6PYzGrgAEsDurEiLLbAamgycj8jfzlJZ5sJM+lpIkTQF7HoswJbMnwslue1VkmvnpzKnpzKk4qd7w1hcnjkB8AH8digEWUHFWuVkFyUDo9tzjFRSdxPyiCI3su0a7qFIKuhUrqTcJs/X7+6QN+exwIQMU90yTttCYD557el5RV3judS9EhPEiKfq5nkfn/RRaof5nAM7e5eizAbl2KKR6zkPoSzQlM37HTKJ3RKJ1RoGBOYCu7Y+jNqWx8MBaAK7G/YBZGu+32Pj7Io9TH1mvPvG6UKFuAQsV82HPlS/J4pQtbslFHlb1fcuhxABX3TKPPqTWMPL/VKk4V90yjx4kfAHBUqbkW+0hyL7MQVMvrR7cTq+w+i4xMGrIN6l9idOOpxEXGk8fHHV2qnqV/zkKhkM6IRYZZij305lRLOwR9Sy5Db06xaXM5Zh/dis9jTmBLUk2JKBX2/5NvCtlp+dRZISkvX9UPgAJFva1lrmpHbrSbCkBAu4qcf/oAndnIW76lqLhnGgHtplnbKp79D6Szq8wzrVSTnt8e30SlUBKaHMPWBxc52nx0tu8v899HFqh/ibGrPkbloCJ/sXxMavWVjTgBuKq9OBG5jrIebzG+wgEOR3zHkDIbrPUapcUR0iQM5HMsbvc+tX06E2+weInX9elit82yuz9Yvx+K+J3mBZpk++ytDi9hVvX2vOFVxEZowCI+RV29WVm3B52OfY9RmNE/M8QHtJtGg4NzOdFinGSZqFRY/K8sDqNqBpR5K9tnkPk/QQiRGz4ydpgb2EboTCmSsuDE82Lj/XFCCCH0Jq2k7mTkejEnoJX1+rvbvazfvw3qKoQQYsHNdpI+0bpY8eGZAWLc1Wli3q2l4sMzA8QTbWSOz/Z90HHJdffjqy33DPrDpu3K2yeEEEJU2D1VVNg9VfQ68YP1WuY/zV/WBtkGlYvp6LPWOktKw9+tBl2Lz+HnyzeJiLUs8Y4EBHM/Kob6+XowrsIvABy6fpvS+s+t/YaW2QjAqHK7JeMNvTQegDlvTGVM2SGoFWpGXJ5MrD57F4GuJWrye0QQFfdM437SUxxVak5HBeOoVHM/6SlfXz9g08dRaZmwV/UuCsD7flWf+2ch8/+JvMT7BwmMD8EkzCSbtNTJW86mPkIby9eB2yj5tBIezo4U9HTnakg4cSlaAPzyehISHUdRb08iE5K5HRHNrouBVCycn9sRTwl+EoNCoSBRq8XdyeL/dPjGXRQKBaExcfRpUF1yv65nBwKwrtZSa9n62svoenYgQy6NZ0K5T6jqWcnuu7Q+8i3HW1iM76HJsVyIfkhVryIoFUpKuPmgVqqsbU3CzPXYMEp75OdGXBjNC1dkwJn1zK7WwWbcFFMiO0K/pXsxiwe6UmH5GyoQVluWzP8Psh/UP0jPM/NRKS2/cEazmQ11x1jrLsTcobBzXgo6e2fV/ZURo4+zzpyWVZuDl8bTKlZpRvK06yLOhZhbZZqkf6JBy6jzW1lVr5fVBhXQbhoV90yjW4laVPAsyN3EKFoUqsiHx1fStURN/Fzz4u/uw6AzG7jRbiqV9kyXGNMBwlKDCUu5y5no/VT1bEQj3w58d3c8KcYknFWuDCk99+/7ocj8Hch+UK8T6+uOoYZXaap7lWJIaalbgJva+R8Rp7DUcKs4ra6xCC+N5WiKSiH9p7Cpzgo8HNx5lPqYrmcHMi8ofZbV+si3rKrXy3qdtqM3s9r7TH6jFe8WqgBAZa/CBLSbxqTKrZh94yBv+ZayitPoCu8w9sJ2Rp5PP7gcnHSN00/34eWQj0a+HVgVPAVHpQt5HQvgrHL7e34gMrkaeQb1DxKeGktwUjhv5avAiuCDDCzZwlp3K+ER5TyKSNp3PTsQR6UjDko1KoUq83BZIhAYzUZSTVoa5KvDxyX7EqGNZMzVzzELM45KDWtqfSvpM/TSBGL0sTZuBr89OcYP9zdarzfW+V6y1MrsVpBgSOXd3xbze/PROKs0gGXGpVAocFM78sPdU/Twr41GqWbm9QNMrNQC5bMdzJ/DVlHSvTKOSmfMwkxx1wrcTbrKzfhzlHR/gyqeDZ/7ZyCTK5APC78uaE16HqY84a18ltnF45QYSf3A899y/O1ZNv10Zh06s+4v37+Aky9FnQvxVB/DqhqLbOqdVI52+72TvzHv5G/MkrurKOVWwsYOlHmZ5uHgzNlWEyVl7g7p5wE/KlXf+n1SZWmYmLaF+9vcv7xHTcp71LT/UkCKwYCLg0OW9TKvN/IM6l/gxxuX6FupmvXaLIR1FmEwm3BQ2p8tmYXAbBaoVdLlWOfe37Fx1UAcHNL7/XnxvjUwnclkRqVSIgQYjSZJuzTGXP2cx6kRNjOof5P++3YTmZxEQFQkFfP5UsHHl1lvv8vdGIu4b7hxhXitloCoSH7t3ufffVgZe8g2qNxGnE6bbf3EE4fYdvs6DTavoOXOtQD8GfGILvs20/fgDrviFHT/CbfuPWHW8l/5atlBa7nRaHF03Lb2Y+Z/e0jSp1b1Erzz/gIAkpJ1JCXrSEzSotPbP+qSHQEXpGfp9Lr0MVr6j+X0oRtAuk/d89Cq5DjGdPo22zZj6tRn0butcFKrWf9+Jz6sWBmAXUGBlPL2popvAT6pVVeeQf2HkQXqFePmoJFcd9qbbr+ZdPJXJtRsyM/te1EijzceGsuyKkGn5WZ0JHfioumybzNGU7qHtclkRqszcvXmI0Ij4oh4mmhzz7DHsfTualk6nThzBwCtzsBvu0ez4Ntf+WnrWdZtOs2GLWdYtfaEtV+s9iyCnOOGj/1gKXvXngRg/8YztCsvXcI5OFpE9YtBa2hVclyW47T0H2v97uSswa90/mzvW94nHyEJ8QDsCbpJ1QIFARhX1+Jl3sy/JK02rWN5q3Y5voPM64ksUK+Yi0/Csq33cnKm/Z4NBEZHEqO1nJ0r6p6HHhXepFPpigCSJZxKpeT4+bt0aV0dpQKUzybNM+f/wntdl9DsvfkAfDp9B/2GraFwQcuuXFKSjkat5jB62LsoFAqG9G+CyWRm5JBmPE05SoLuCk+SfkaR6Z/A7Yv3WPTxSklZk/fe5LvpFgfPVt3q4uSi4YNq6U6gqmexzM8eDmDVEfsRNJd8tgNH5/SZjspBibOrfbtXRhoXsyxTe73xprXMYDJxPy6Wq08icFY7EBwrR0X4ryIbyV8hUSnJ1C5YVFK2/b1ukutFl06z9/2erAu8zBs+BQAon9eX8nl9ATj18yabcYf3bITJZGbptPSzdJPGtAagUas5AIwf2RKz2Yx/8XwA+ORN35a/HiiNJuDj0hQAD0dbT26T0UStFtLy8Yu6k6+Ql/V6x9UZTOj2nfVaoVSwd+1JnF0cKVwin82YYJl5gXQWteuH4+z64biknYNGzd5b0s0Cc6ZlY701KzjTdxB99+7k0oAhNFy7ih/f60BJr7/fTUPmH+ZVnJd5BR+ZbHh0P0r8MPsXoUvVS8o3bjsrzl24Jx6FxQij0SRGfbpZXL0eaq1v2HK20OoMYszkLUIIISZO2yGmztxj9x4jL08WH54ZIIIuBIuFg1c897O1KDFGXDp5O9s2c8dsEq1LjZOUta80Sayeve+57yPzWvKXtUGeQb1iMs4Qnof3P2rAoM+kNpTEuBROHbxOiw9rAxAfncTW5UfpOz7duXPG3H0UL+ZDtSrFWLfpNH161GfBzC6s3XiaShUL88P6kwzo3ZBRn26mZ5e6hIRGM6hvI/RZGMmNz+JOZZ5BBV0NwcXVERQKipb0tft+k3p+b1N24N48ACJCYziy8wLbLn8pqU9N1uHskvMSz2Q2W73vM5OqN+CscbBpV27aQm5NG5Xj2DK5H1mg/gbSfjlzoqX/WFzcbGOGXzwRxOJJ2zCZTLTuXo+UJNudwc/GtbF+79m1rtVNoXe3egD0+rAuGo2aHl3qWNvp9UYMRvsxprQmyz3K1y7N07B0H62R7b+RvFfGd2tVchxCCGauH4QwC6o1KGMzboGi3kxd0Re3PLY58nwL5ZxgocpXS7gxZYREdJosXMXvo/qTqNNxOzKayMQkahYrgpODmsDwyBzHlHl9kAXqH6Kl/1jWnpiMb2EvSbnG0XaLvHHbN0mKT+XbKTvJV8iLqMfZRxZwUNu6Jmg0tv9pNRo1Go1NMQApplTrd5/C6bacA/fmced6KJ+0Wyxpv3rWPlRqJUaDieSEVL4auo53OtVk9BxpzKn3yk3EkMWsbd7Yzcwbu9lu3YF78/g96B4XJg7lUOAdu2183d34YOUmjo0eQPnpC7k5dRSeLraCL/P6IgvUP0hmcQJQq+0vX9r0qEdEaAy1mpTnu2m7XvheSckW73O3DDtl9brM5/SWMcxZ+RuHTwdl6lEJnd7IJY9QqlUoSnbcvPSQ7SuO8XPQbNqWnYCrhzMb/5xKt1rTEUIwZu6H1raZDd4AUeFx9Ko/A8h+ttmkrD/lpy8k4PORBE4daS0/PMKSYeaLX45Sv2QxWi9dy5Iu7xESI2eR+a8hC9TfRKcqn5GcKF2aZbTfVK1X2m6/zDaeHSuPZVmXxsZzU/HK5y4pi46zZHQxmc3EJ2mts6z7j6IZ1/8dhnSznGsLjYilaIF04XTLYet/3YKDbPr2MJOX9UKdwSPdy8edFb+NZ+A7cyhc3IcPhzbLcoyPGn9N6UpFeBIWQ896X7L+9BS77erM+Q4hQGcwWm1NCVodZrPAw9mRZuVL8SQhkZsRUcSnavHz9uTe0xi7Y8m8prwKS/sr+PxnaFFizHOXtygxRmxf8bukLCo8TqQkaYXZZJa027Do0AvdL/BuuAi8Gy5M5vRx6n4wTwghhF5vFA8eRQuD0SQePIq2qc/M7WshokWJMSI8JFq0KDFGbPs+/ZlblBgjLvxxy3q9b8Mpu2OkMbX/askztygxRvRrOivL9mWnLhDJOr3YfP6qEEKI+FStiE1OlbzXkE2WnUmtwSACwyNF2akLsn0GmX8MOaLm68CZ3yxZWzIeEcnIzQdPuBdmcTZ0yuOEs6sjCqX0GFPnwU1t+mWeoWXExUmDi5MGpUJB/Q/nS+rSzuLNyHBs5v0hWZ/BC7jwAACjwcTeW7PoNLCxpD41Jf0wc+vu9bIcJzggjHNHAtl54ytr2f67cwm7H0VL/7H8uu1P+++icbD6Qv187Saujg4oFQpGbN1H66VrOXIrmE4rNpKqN1K+gH0/LJnXE3mJ9w/wxaAfqVy7JO3KT6TX6BZ0HSZd/ny97jAuThrGdW/Cw4hYyhTNRxFfyw7Xxm9+A0DjqGZAs9msPJzuqX07U666jKRo9YDFyXHdnN4kp+pt2tSuUtzaZtPCvrzd6xubNmvnH2Tz0sPUaFyOAc1mA/DhkLd594NaFPTLy7gFXfEvX8ja3mwy8+heFE6ujtZdutRkHQOazSb6SQK/3JmDMoOnvEKp4MC9eXw1ZB0LJ2xl4YStFC9bkO8OWIL5pe3cda1ZBYDutdJdIBZ/kL6TmcYv14M4OrKfTbnM64ksUH8zH7eYh8ZRzZxNH5OcqKVTlc/4dduf/PjHJGubT3s1IyI6gZKFfShZ2EfSf/2iQ3w0vjW6VAOP7llmGl+tG0i1t8pkK1AuTpbtOoPBREk/6Zhps5FihSy7dUqFghu3H5OZyMdxbF56mI1/TsXLx2Lj+v7LPWxedoTNy45k+95pxu8ZH6/l1KHrOLlo2HVjpkScMjJ5WS+EWTCs7UIq1iiR7djZ0bpy2ZfuK5P7kAXqbyLsfhT9356Ns4sje25adrJc3Z34+fZs2paZwJ0b6cdPyhfPT/nitgdnP+tjORPXebAlDdSBe/OY0O07JvdawcrDE7h9LcRmKZhGfh93nDK4MKzedhrls7ZarQG1WkmFUgV4FGHZ+XJx0lDrjWKSMXwLedrMeAZNacegKc9/OPez73qTGJeCu6eLTV1Awh1uJQTTsYglcJ9CqWDpL/Zz4QkBXy07SB4PZwJuh6NQKvhuutSl4fvgTXT1a4uHgxx987+CHA/qBZi+4Vc8XJxoVq0MlYsXIOhRFFq9gduPoujc0LIEaek/1jp7EELYzXeXRkv/sfSb2MbGpgMW/yGj0cT+u1nH4W5Tejx1363E5KXp4Xf3PPwIB6ULBV2qkdexNHpzCgqFkkR9GFXz9nmh942KT8LTzRkH1fNH88wJg9mAWQg0Kgc6nx5GhyLN6eb3nrW+4+khdvvtqLfM+j045KnNrDCtb8Z2Mv86ckTNfwqdwUgRH0+cHR1YvOsEq0Z15nTAA2qUKWIjQi9y3MVkknp2m01m2pSZgBAiR490k8lM+WrSWY9R6Mij9iMs+U98nSuhEkY0KjdUjll4aGbi+I17BEfE4OPhwo9HLlC/fHEMRhPtalekfFHf536vrLgaf4uvb6YfNN7x6CA7HlmM9f39u7Cj3jKJ0Iy9OtNmDHviJPPfRBao52T/n7d4EpfEpA+bEvbUEqOox9vViE5MYe62Y3Rq8Ia17Yrfxj/XmAPfmYMug/F689LDrJ1v+WXNSpxa+o9FoVBYA8O17ibdNetY/Kfnfyk71C7rR93yxXBQqdh/8Rb++b0JCouidKFXIwo1vCqzo94yvrq5jBh9HPOrWGxxHU8PoWWBRtZ2cYYEPB08uJ/8iJU1vpaMcT/5EQmGRJxUjqgUKsmf6eCkh3bv6+7ghq9j3lfyDjL/HLJAPSft61ei/bPv4zo3BixHTAp4ubNufFdJ26IlfdGZjGwLDKCAmxux2lQ6l7efXy41OX2L/sOhzbjwRxDztg7N8jk++aoTW747Sq0m5ek3sY0kxtLzIBAceXKSZvkbAKA3G+h5bjhb6i4HwNFB+k+iaZVSmER6mOEuZwZTwaMMUyva2ooSDIlciL3GqafnuRF/C8A6buZnuBR7g7FlBwCw5sF23NSu1vqG+Wox7NI0qniWQ6VQ4q3JI+n/e+QZfgn/3e77jb822255pyIt6erX1m6dTO5FtkH9zVyJCGfRn6dZ817HF+77y+PjFHTOx9xbaxhVtie1vNNFrmvrhWz6Jf3E/rYNZ7hw5i6pqXqcnZ9lU0lIZdn6gZIxf3tynID4IEaWGWAt63JmsF0hAWm8dLCI0IAL41ApVGyss5QuZwbb9BlUsgdVPCuSV2N7tCeNCG0U467Osp4B3Fp3iSRzTZotalOdxWiUOYvw49QnDL88nUklJ1POOx+uGSKbdjw9hOGle9M4X+0cx5F5pcgxyXM7VQsUfClxAmhdqCFvepVjU93ZEnE6cfQmVaoXZ/Oak9ayzj3q0uK9N9HrjLRsV42W7arx2dedbcZc+2CbRJxyQpnJvubh4M6Wussp72E5qrOl7nLrp0cxy3s29X0rW3ECKOCUj4nlLeLmqnbmgzPDORppCWr3ZWB6rPKe58YQZ0iQ9D0Scc1mvFuJ9wAYfGQPdTbZim0BJ9lu9ToiL/FeEq3JyL34GCp452w4DktK4GZsJM2Klsq2XbQ2hR6/buHAe32tZZnTPB37NYCCRSy//C3fr8bsqbuYMN2y+KzToAxnT962xnzy8ZWezwPLLpq9WY+9sgVVp1HYuYDdZ51SYaTd8ufhTPRl5getQiCYWXksZd392fnoEMVcCtPx9BDUCrXVSD7i8hf0Oz+RWt5VmFBuEAAzbuzg7QJvSMb87YlFrMt7+9KnYjUy4+soC9TriCxQL8nYE7+w78EtGhX2Z+07nan400KSDbbe2hl50Ecar7vqpsWMr9aIbmUt3tGuDhpuxmQdzyg1RU+NuiVxc7eEFMnj6cKHfSwJBHZtPse1Sw+Ji03mwJ5LADRoWh4ybN59fsPisjC9knSXceqNeZIyszCTatLirZHGa+pyZjBFnAsyv+pU67U9Mpf39+/GO/kbWseeF7SS3sU78F6hdI/6n0L2kGRMZmm16RRwSj+usvjNzzEJszXzcbQukaKuPqSa9NbEoAC3E+/zTv767AhPRG+yPVKU2Y4l83ogC1QOTO62jE+/68PicZuZvOIja/m3jdsxOr4BTXet5GJkGMc7DiIyJQk/d09cHTT88uAWrYuXAyBGm8qYk7/YjB2n03I6/KFVoJxU2f/ncHbJoDZp3uDPYoC3/7A2SqWSAoXs/yKmmFIJSgxmbNnBlHO3ncnZK8vM8uqzGXxxAl3ODObbal+x6M3puKhcUD+zHR2KOMaW0L38UHOBtY/ebECtTH8vpUJJRY/SrH2wk7UPdkrG3/P4MHseH7a5b0bfJpMwozcZCYgPpYZ3SQBCU8IBGFSyG6Uc7lElX/qsL8GQlON7yeReZIHKgeiIeL7ot8punX8eb4J7j0elUPBH2D36HdnB3V7j2BUcwKgT+2jdxyJQfQ9v43bcU0nfeL3loO+3jV8uZdLELzvYlLV6vxoOGvtOlSZh5i2fWtT0tk2U8Lx4afKwpe5y+vw5Eg8HNxyV0tAsDs+M2a7qdK9xV2wZXbYfzionNEoHFCgITgph/LVZNk6WhyKOs+KeNKCdr1MeNr8lDec78sqXeDp4oEBBM7+SkrrQFNsjPDKvD7JA5YB/xcKo1ErGLOwhKTeazaiVSlTPjMgNC/tjNJvRm0y0L1mRUSf28WvIHd71K83Vp+Gc7CRd9nQ5YMmXV3yN7ba4vbIj7ftTMk/2fjxZiROAu9qV4aUtM8DnsUHNqDSB0u72z8StqWWbOv1F8HTwkFyPvzaLJr51bNqFa6NyHGvgBYsf1eqatoHxAO4mh7zEE8rkFmSByoF7AZY8d+M7fcOc7Z8AsPTaGeZeOs7Mes3pVsYyI1EAGpWKDw5uZHfrnvQtX513/UrT9eAmFEARN+nS61ZsFHPqt6SEhzRVUucDP7GtZXfrtUmYSTLoye/y6s6XDSnVGxdVeozweUHLGVvWIlBmIdCateRzyloMgxKD+fzGXLbUXZ6j2C2r/nWWO3ohKY8ZdWUGbmpXhpXqZVMfnPQwWxeDHudGk2rSsrz6jCzbbAndl2WdTO5HFqgc8PB2JSEmWVI29I26JBv1TDp9iG+unObsB0OI12v56d0P8XR0Ijg+mh7l3iQ4PpoZdd8FIDg+2joDStRbnDM/KC3diUqjZv4iz/VsupRNaFM2ASocnd/HybU3INAmr0eXuh1QAYI8Prsl/Rrlq2t7zxdY+k29MY9qXpWt11nt9nU5M1jigAmgM+nZHnaAnY8sqdrbFmpKn+KdrPWJxmSWB2/kYXIY4dpIOhVpaTPu/vBjrL6/FYAfa86xORx8N+khEzI4bPb3lx4qlnl9kAXqJRlfrRH9KtQkr5PF3nIrJor+R3fg5qCR+A6FJaX78KTt4hmFWTJLehm0yetwcu2JEHq0yT8+EyeIf9oOkyEAjVNLUDhg1F/9S/fJzL3kEASCCeWy9nbPSOYZkKNKw85Hh+hStDUfFG1t095d7crZ6MsUdPJlQrlB1PKuYtOmmEsh8mo8WVHD9pweQCm3YryRpxw1vCvTqmBjG1eN0SN/YsGi9J//km9IjCC8AAAgAElEQVR+xd/fl107L7Dqh/7P9V4y/wyyQOWAi5sTc7Z/gtlkm64pTZwAahcoyvVu6b5BV5+G027fOgA2t+hKnQJ+1jovR2dq5i/CoisnWXTllM24mW1Qu1r35M18hSRlDo6NSIobj0pdApVDOWt5Hp+9mAw3ERgxm56gcbIVgb/Cp9dmUsv7zZwbPiOzOADZRhwY+NUW8ikb07ROOT6dfIKhHyjo0EQ606yYpwyt8re3P8Azplb8RHK9a+cF2neoQVRUIgBGo9masCLoVjiVKhWhXn37ceJl/j1kgcqBwV90ZHK3Zbh7uTBxaR9JXfE1sznd+WMKuXrY9Gu3bx3v+Vfgm4ZZn/9qXNifom6euGvSd8MGHt3JiqaWHTqTMJNiMNjYrwBU6mKoHapgNoXg7rWchOjOeOTdRlLsJ2ic26HXHkShcME1z3Rrn6z8lrKrG1G6P/V8agAwNcBygHlM2UGSNqOvTMtyXIGwilS89jwqpTsqhTMalQ8qpStmYUapUDL1xgKmVxpNWGQ8sYkpDO/SEDcXR94sUxiA+YH7KOmeH7VSRZvCFkfM3aHneb9oTX4Nv8a7Bd9gd+h5rsY+5L2iNTgbdYePy7xjeQYB7TtY3iEtJlbGbDpubk5ERydx7NgtWrepSv78ss9UbkE+i/eSaE1Gyq2fz+8dBtJkZ9bxvDOT2VkzM8XXzM6xTUaE0BEbUR7vgvcylpIUN95GoKJ00TirnHBU5hx6xSTM6Mw6NEoNziqLY+ji26vQm/WMK5ces6nLmcHZ2qDW1Fpk7R8QOYwCbh1I1AegNT6inM9splyfh4+jNzH6OKZXSj+AHBmTyOOnCRT2zUM+z78nAN2qlcfoP6Axo0ZswNXNiRlfdeLGjUdUqmSxAY75YjvzpnRi1tKDREQmsPiLDxjx+VYWf/HB3/I8/0H+8lk8WaBeknb71nH1aXiWYlJ8zWwGVKzF5JpNXmjc5xUoo/4CJtNDHJ07YPvvQNgps3AqfAj1Cy7DJPScCv+YJH0IbppiFHVrgVkYn/U2UypPNx4m7iUkcR8alSe188+xO16ULhpvjafkoG92aI2hpBof8SRpN+V8Zlu9xNNmULmFHb9c4vTFe3jlcSEmNpnwyATmTunAwpVHmP95p5wHkAE5YN3fz/hO35AQk4yHt6vVzQAsNqZptbPO/fZ3MzHwDAqFAgXLUCoUmIXgblIom+t+yY5Hx/ig6NvW4yFpxOluUa/gt8TpbuLiUAglDjirfSnm/h7F3NtyP2EHAAazxU7zMHEvxdzf41HSrwAs3nuSnk2q4e2ebnvL9yzGUpVPFnL1m3QHyl83nuZhUDhdRrbg/G/XqVinFAX8fHBSF8VJXRQvJ8tOYtozvow43Ux4yKmnN9gTdoqfG9gazN/+/cXHrO9TiemVPqJj62qcvniPz0a0YuTUrQghyOslhxL+p5EF6iVo/8t6APqUr/7SY9hzxsypbkmj92hbojyANWhdq0L1SDQkcynuNvOqDEejdODP6EC6+r1j0z+PYxkUKNGaovF0LE+tArMJT/4DT8dy3IvfhhkDAPcTdlLcvQP1Cy5Db4qjmLvFjnbo8m36vVMTgBbTVrN9Qg/cnNPtZ8f3XOTA+pMIs5n46CSadamDh5crhzadpmkn+6FOLscGoDfruZ10n57FpN7xl2LvMO7Kd3b7pf0MirsUoG7eimwJ+Z0uftLZ6uHG8yXRTt/+fTTf1xxDKbfC3E8Op/+fcznSZIGkj95sJK3L3M8s0RlmT+6A47NU8m/VlB4J2nb1Bp2rVGLt+cv0rvn8mwcyz8mrSK73Cj65lqWTt4qA8/ckZV+dPyoGHNlht32iXiuK/ThLFPtxlrgRHZHluE9SEkWyQS+0RkOOnyS9TkSlJIkkve4vv8+xR32EWZiEWZiEEEL8EdZPXHs6XxhMKSIq5aK1XUTyKSGEWRjNWvEgYa8QQoj2M9da6zvPWi8Z943h9pNl6nUGoUvVi8f3I+3Wr7m/TdxOuCfm31pht94szDZlTY+OyvoFs6Hp0VHiTuIjIYQQ95Iev/Q4Ms/NX9YGeQaVAwqFwnowN41JNbK2K7k5OLKwQRval6yY7bi+zm4sWvobndvXoHChdE/rOQsP8O7bFan6RrpbgqMKSQC25yE5WcfBwzcIj4hj2KC3reWNCv8oadewUPo5Qx/n9DAl+V0soYRVCkfrDMqYwdVCpXy+UGIOz2YeBYvbT6jZLP9bFHYugFemaAM5Lc+yqi/knJf1dSZn2W7QeWkS04z1Uyr2orHvy59VlHn1yAKVAx9/mbNB9HxoGA4qJSl6A/WK+1nFKS0apdZoxElt+6Peve8y+w5e5fDP6aFO9v96nSJFvKn6hh+NW87h84ltadqovE3ftRtPc+nyQ2Jik3kcEWeTfCGN/L4e9O/dECcnqcPklfuPcdY4oFHbN24LQKc3ShIlJGuzDyfzMqTt/mXeBVxfZzJ5HFxxUNr+3Fr+MZ4DjWyN9jqzgVSjbbblJdVHUMGjWLZLvLd/H42r2sna5+KtUEoXzUeqzkB+b3cuBz3izbJF2P3Hdd5vlO5FnzniqMyrRRaoHBjfKT3bbkYjeUa2X7tBh8oV6b15B3cmWgzF+24Gse3qDVw1Dkx+uzGF80h9pdIEZfMaW/8jrzwWI/TsLzsxYcp23qpbGo1G+p+qd7d6+Pq4U9Lfl6KFvXB21rBlx598t+oYxw7knLSh7+KtODmosxQoswCD0cTZecOsZfHJWada/6u8W6Ch5LqQs8X4vvTObnY+Om7TvuUf0nfsWfxd+pRogbva2abt85LR6/3NMkX4/eIdrt15zBulC/F2zTIAtHlLOjOWxenvRRaoHPAp6Mn4JbYHWTNSOI8Htf0svjNLT51jcL1aTP/1KOdHfEy1hctsxAlg6GhL9hWfvLY7Q47PZju1a/jTt+dbNuL0NDoJD3cnWr5b2aavPYxGM4mJqXh5pZ+Lu7zoxSNiGkymF2p/4/JDKr1ZzG7doT2XaN6uGkcPXOPN2v7s+uksHw233RX1cLCI9Z4GX1nL2p2YbHPt6eDGgdAelHBvTTlPaRKL4RcXW79nt8RLMqYAkKI18PHsrWjUKuZ+0g43F0f6z9jMlP7N+WTuDvbMl4/D/FPIApUD9wLCrLOorGZQS06eZcnJswBUL1KIHdcC2NW7GwBnhg+02+fWbUuQNb3eiNks0DiqrX+NVRmyBffuVg+D0URysg7PZzOrTj2yT07ZuKV9n6WMMytdqh5HZ6ld63HwEwqVtM1w/DKcOnqTN2oUJyE+BRdXRxZ9uReATya3RaNRs2TWL8THpXDueBCbfzyBRx5nxvRbTb0m5enYIz2VluOzWU27E5Ml42e+dlCqya+pQSmP9yXlmXfpWvwxnp8bzLS7dEzDxcmBbs2rk9/bHZ3BSB6lM/WrlKBYAS9GdWv8wj8LmZdHFqgcWH70U+v3MUPXU/etMoQ8iGLkhNbWYxMTmzakX63qNF+5ljcKFqDnpu0EjvuE0rMWAjChSQP6165hHcdgSJ+JXLkWyvgp2yT3nPrVHpvnKF+2IN8t6glgs4Sb/vVeTp29S79eb/HdqmMUKeyFu5uTtX1mhFlgMprQpehYPXkjDho1A2b35GFAaJYCNWrVXiZ1bmq9NpnNmM3C+jPIzFcTt7Jqx3C88rqhVqvo0rcBRYv7WPP57TszBYDV3/wm6Td/dT/JtVFYlsI5zaDMwkw5z+4ExK6hSt6PuRx7B49MNqxND49gMBsJ18bYfWa92cATbQz1fSpz/e5jmvdoStfP1qFWKVk/3RIPbMHG32lc3Tb6aGLqIVydGqBU2KZ4v/+kDSXyy2FfXgZZoF4As9lM0WJ5OXPyNuOGb2D+UosAzD56nHnHTuLl7EyVBZaMJEtOnuVA/16U8slLtYXLJALVutNi+vVqwOp1J6hVo4REcBq3nMP8mV0YM2kLyxb2oEI56SHhzIyZtIWLlx9y7MB4tuz4E4ANqwbQvN0Cmraey4Fdo6w+PFYU4OLuzP3rIQxZ2JePyo/g/eGtuHftIYuHrGDzI8vRnQGVR7Py+gLCYxM5ei2Yhf3TU5Q7OqhJ0urwcHHCHpt+HUfglRA88jiTlJhuu1IoFLSp+yUGvZFDFy3HcNL+v3n1qTbjpJgsfXOaQaWYtOjN8WiUlkQR469+j7vaWWL4fpwaTSHnvEy+thIAnclAtD7Bau/SmvQkGVM50GgOY3s0ZdTC3WyaYVneL9r8B4M71GfV5A/tvm+K7hxuzm/brdMb7ScTlckZWaBeAKVSSczTRPR6o9Uu9CA2DqVCwfWxw6kwZzFXRw+jyoJvuRb+hHrF/TgW/IBLo9LPrq356dSz/lkfDSldMudMMRs2n2XV2uM4OTrYNYof2jOaAcPW0rzdAtxcHZk4phVv1bWc1g88HUTF+uXIn2HrP1+RvDTp+hb7vv+VITWlR20KerlLvMQB1o+W/qJmrndzd+LcydvUaVgWo1Fqu9p3ZopdMbJHf//W9PeXRmR4+/fRNku3NDw1ltnNb42lmZmHXFzE7DKdqOFdVjLOuHIf0qJgLbtjLRyVvlwc+aEl67GTt22mHACFQo0CNTGJK4mIm2YtL5J3BYoMx4BGj/yJyMgEfH09KFU6P8HBkQizICExlVWrZdtWZmSBegHmLumBUqnA2cWRxs0qADDr6HFMQrDg+CnWd+vM/ZhYAOa0eZft1wJYePw0/Wune5z36V6fhvXLcP7ifZvx03b2PDyy34lq0X4hWq2Bwf0as3z1MVq0X4hKpbQuHVt3shiFO7arzpwZnfmw93I++2KXVcgWDvqeVTcWos6URXh6R0vWl2XnLZ7sAyq//Nk4lUrJgV0XiYtNZtr8rjl3sEOaK4CjSoM607Gd905Msn43C4HWpOfrKgOo6V0u8zBsDfmdoIQQJlz9Hhe1E/39W7P63i/4ueS3K04BsU8YfnIXnhonupeuTkf/yrQ5sJrSefLRrnhFGheSxj1/HDOKxNRDJKQcwNutFxWKhhEYWpjShS6Qqrskadur91scOHCNTye15fvlR3FydOCrrztz/s97yNjhVXh7voLPa8GIQWvEw/tRYtzwDWLUx+le1aW+XiDWnL8khBCiwdKV1vILoWHi9IMQsS/wls1Ym7efE41azJaUrVpz3FrWqMVsEXAzLMdnik9IFUajyWasRi1mi6iniXb7XD9xU3QrNlgkxiQJIYT4ZtgqERMRJ7TJWtHBp6+1Xa/Sw3K8f1b8+O1hER2VIFKStSI4KFyE3I8SQgihTdWLk0cDxb5tf4oZ47eIS+eCxcN7keL+3Sfi+qUHIvRBVI5j/xUP8FNRN0TTo6Osn5kBG0S8PknS5mJUqNj74IbY+yBALA84I4QQYv/Dm9ZPZkymBBERO0MIIUR0gsUjPiCkkNAbH4v45H0iKKyKte2EcZvFB52WiAnjNgshhDCbhTh08Jq4cvnhS79TLkb2JP8nKeGfj9MnbhMWGsOGHen+QZPfbkTvGpZzWGn/D5YdvRdh/eYzOdqcMuPh7kRCotQ/KW0mZc+FAaDSW+X46UH6GbfhS9IN0zuifrB+X3t7yQs9S0YavVsJbx/Lcsi/TLoTpqOTA/WbWBxPW3eqmWX/0ZeXcjUuOMv6rDzJq3mVZm7Vj63XerORRymRnI0OZPW9/QDMrzqEql6lSDKmMjNwA+1PWgz2ZdyL8FnFXlTzKUJIUhwgGFShDqlGA5HaJHqXqUHXwxto6SedpSmV7pIzfxl5FG3ZxQ0MLUyFomEUKJiHWXO6sH7dKUJDo0lO1vFGFT+2bj5Llap+dsf4f0YWqBcg+M4TylUsjF9xH5Yt/pWho5oD0Kdm+hGRfrVe7gDxg5BoAL6c8n4OLW0ZO2kLvvnSbSNHj98CpO4Gz+O8mRNTl+2nduXitGpQIce2JUrn7K7Q/+xyHFUO6EwGxlZoSzmPwta6r98YgEblYDciZ3bozelJO7ufmUHEsx27ch5+HGo815rDD8BN7czMNyxp4O8lPWbYpW8o7GzJQPx+8UpEpFiiOtyIicBktiy/dXaSgmZHkbwriIibTJlCVwAYOaoFAD171Ze0+2Rk8xca9/+GVzENewWf1wazySwe3o8SiYmpObYNjIgUby5YKjqv22RTl3mJ16jFbNGk1RzJddoST6sziEYtZov4+BSbcYLvR4pGLWaL1FS93WdYsvywaNJyjt26F6X5oKVi2MxtL90/KjZJzP3xsKjbY77Q6Q2SupDkp3/18YQQQty88s8vlUKi+oqAkEIiIKRQjku8/zPkJd4/jUKpwK+4j/U6JC6OPTdu4apxQKlQoDeZ0BqNBD+N4cCt26hVKtZ06WgzjsmcfgA5zaj987YRkjaLlv7GgL6NmLf4ICA1nptMZoaP3Ujgrcd8PrGtzVm7NH45dJ236ll27/SmeI4/7oHeFE+r4tLjI3W6z7fXnbM/jbF+d3VxJH9e+7tYAAOmbeL6newTZTqoVZQp5suCdb8zsV96SJiiLtnn/Hte7gY+plwV26XS2aM3KV/Vj4+az8XZ1ZENxz6101vKugfbaFmwaY4B+Yr6/EBk/Ex880wiJnEld8Mtx3YeRnbEN8/kLPvJ5IwsUH+R8IQkKhfMT5VCBVAqFKiVSpwcHFApFCwm64QFWq0l9tKd4CckJ+sYPfxdXDOkNl+3oh+ffbmbhd/+iouLhp0b07OojPtsG+cv3sfZWcMv20fg6upoM377bkuJjbWkyxo60OJgmWp8TEXvUejNcTbtty/oh5uLIy7PhM5oMpOcans4WOOQ9S/qd1O6cOdhFN55XMjn7Wb1jK/Tfb5E6P4uZo7ayKVTd9iz/rQ1TXxKso6K1YqhTTVQsXoxnO38rLLifnIoc4O+Y84bn+XYVggzQhjwcuuJl3tfFKgRwgiYiYhLF6n4lF9INQRSIM84a9nTxB/Qmx5TyDPn+/y/IYf8/YucC3mESqmgSsECzDj8B1uvXqdPzWpsunyN08MG4qLJOvHk68DOI1eZ88PhLOszCo/eYCRVZ8DFSYNDhkPImQUqVWsgOVWHz3NEqPxt5wXeeZbwQAjBZx+t5qsfs/YX6tH4a4Z89h71mkkP9X7S6Vu+2T6MD+vPQO2geq4ZVJQumoW3VzKz8kQEUGLZPFr4l6awuwf1CvvxdvGSOY4BkKI7j4tjTQQm7j35EBfHamgNQZTIt4YHTwdSMM8EBAInB1sP9dccOeRvbsFBpWJ686Zsv3YDEPh55XltxCngbjgajTSygVkI9AYjRQt4WcXl7f5L6NaqBv06WML1Zl4WXgp8xMg5O+zew94S8nlmVe90qIFBb8RBo0ahUBAaHJlt+8S4FBtx6tlkFut/n8iE3ivZdHIynWt/keN909A+82RXAA+GjM2+cRa4OFp2K58m/kDJ/NvQGoIIi7U4quZxbo5G7YfR/PSlxv6vI8+g/iJpMyh/b28aLlvFjbHDAXianEKz73/kymjbBJeN2s7lj58tU/xHj2P55NNN7Fw7hOAHUZTMIrBbZqKeJtKp73LrOH+Fnp+uIyYhBQeViojoBPK4OePkqEZnMJKQpOX0esuWfp3u85n6cUtavlXBev08IvOySzyzycz0wWtp3LYqpSsX4eyRQDr1b8Sk3iuZuXaA7Xus28b6Xp1f+D6vgsDQwjm2qVA0zG75o7g5gCBRd5by+Xe94if7V/nrsWhehaX9FXxeW84+DBXnQx/Zrbv62H7I32Yd0sPj6vVG0W2gxbmzYZs54kGI/d2soeM3iu/X/GG9TkrSioZtst+du5sYLLneH34w2/ZCCFG727xs64IePBFCCJGq02fb9nnHfJW0W7FerDlrCVs8+7c/xLE798SwrZZwxWN3HRANF60Q0ckpYuHRU6/83mm7dyZziohNsuzaPo4ZL26GlhHxybuz7Rub8qt4FLdQ3Izo/Mqf619G3sX7tyno4cbegFtcfPQYvdFEkl5PWHwCF0LDiE5JYUi92oxqWE/Sx2Aw8kG/74mJSebwrtEYnp1V27/5E7sGb4BvZ3fl3Y4L+fnQVX7eOBylKuc/TovuLGHJmwut1y0LNGdX2B7aF25nt/3SzSdwc7Hc/9iFO4Q9iad76xqSNmWKWc4JRj8zwKeR1S5gTvXbF/SjSH7P7F/kOVEqFBwOCqZ37WqMb9aQnuu2Mbl5YwC6VKtMREIi3i7OjGxSL9txJrWZZXW8NBlNzDpgOVazeOhqRiztl2W/oLBKqJSegJnHMWMoVfAkBb1mk5BiG50iI57O7+Dp/A7kefEYXf95XoXKvYLPf5agyKdi0fHTkrKMMx+T2SyadVggPpu5WzRsM0c0bDNH/HEqSNL+50NXrd+HjvtJCCFESqouyxnU8EsjxYjLY0Svcx+JEZfHiGGXRgohhJh0/XPxKCVMfH5juvj8xnQx/uqnkn61u80TYZFxlue+/8Rm5pPx+vKtUMl1WGSciE9MFTq9weZTu9s8m7IUrV5ExiQKg9Fk9x30RqPQGgwiJDZOdF+3VRjNZnHo5h2x9fJ1UXqG/QQNr4odi/eLSW1miUltZlnLDDqL39a9aw+F2WybyCFtBmU2G0RM4noRk7RBBIb4ibvhTXOcQV2PXvUKnz5XIc+gcisnwh4QmhTPvvu3+KyW/SQLjdrOpXyZguj1RiaOaMmXn9qf2WzZeZ753/7KrztH8e2cbjne+5tns6ZZt+YysVy6jeqrSpawJtMrfm7TZ+eRqygVCgrlsyQvKFPcMlP6bMk+Zgxvw/JtJyVhWzLPoNL6ZYXGQc2UGwtwU7uSbExhSoVhfBO2gvDgKAo5+fJFJWk0BAeVih7rt7GwfSsAVAoF+2/exkmtpqSPd44/g79CamIqQxf1ASx/wE/sOEfDTnUAKFHZj0d3wilSuqDdvgI9TpoKOGuq4eXanVT9FQx2wq1sCW5ICfeW1PL9lKD4bZTO0wmN0k0S+UBG3sX726hb0I8GSiWdS1fCQWn5R9eqy2KSUyy+RRkN5Y3azsXVRcOKtcc5fuY2G5ZLt9HXL+/H8dO3adZ+wXMbxWffmsfEcuMYc3UC86uk59lbePsbRpWRRgYNj0qwuhJkXIoplQoOnw1ixvA2rNl9jlXT08XxaZxUoJ6Hdws04H7yI+rnrYbOrEetUOOt8aSJb12btguOncJRrWLV2Qts6GkxfDcvV4olx88yvEGdbO8Tl6JFo1bZ3UUtN3UhFycNZe5vJ5jWxn78JrMQ1sB9JqPJKk4jG00jMuQpG+9/a9MnPmUXCan7sGcXFsLM08Tl+Oc/YC3TqNxRKCy/fiqFmh3330WtdMZoTkWl0OCkzkuyIZxupc5l+67/dWSB+ptQP0vLlCZOYPHE3r/F4i3+fs/0sL1pdqeftp/j9732t7Ib1itjV5x+PxnEjZth/HnxPuuXW+wjgy8OY3l1yy/R/CqzGXN1PPOrWM7lZRYngIL5PPAr6MXHHzSgSa3Skrrvt51i6FdbUSoVVCqVPmuIjEnE6TncKDJuEj/RPqVr0bY80T3FTe3KmLL9OB9znRKuRWz6VS6Yn9GN6/PVb8fYfjUAs9nMoVt3iEtNZcfVAFpVKGvTB6DyF99w/fP0d6w4fREBU0fS84etJOosfxy6/7AVgIfRcRTLa2v/6vlZuue/KoPrxaI/pmX5niXy7ydVf5WQqB6ULXzdWq7V3yBFdw5vd6ntSoECZabZ0gf+x9h4tzZ180/Hy7EMKsXr4abydyIL1F9EbwwjOHoY5fPvQggDigz/qGJTDuHlkn4IVJ1FBpU+H9ZjzJRtlPL3lWQJCQ2LZej4n4hPSJW093B3prS/ZQkWF5/CO40rMLR/+jIyTZzSSBOn7Ng67yO75Vq9gYuBoZxcZ1mCbT10iYiniWzcf4HWDbPP/ZfZMB6li8EojBRxLoBZmHFTu/J75BkeuvnR1ckXR1W6J/07ZS1Oi5PfaWwt++DNnJNEqFVK2ixdZ71Oy9/3Q++OKFBQ6YvF7P64B3VnL7crTi9DWpA6hcIRBWpuPvLHyaE8apUPWn0ApQtdkLTfeNeSZTkobgtBcVtwUdt3LXFRv5r48K8zskD9RTTqwiiw/GIpFA6YzIncfNIRhUJNxQL7uR3ZkzK+llTpBqP9rCjvtajC0tW/28yQChf0ZO9Pw+z2SU7R06rLYtq3/vvSbSen6tl84CIbvu6FWmX5RdfpjWzcf4G2jSoxeWD2J/Ab1yxNjYp+dHrHkgzz45LdrXXKZwHoMtue/i4cVCrOP7T4IVWfuZSLk2z9014Wb/cBeLun+WUJ0pZ5RlMksck/ERhamKI+q3B3bglAt1Ln2P2gDUXdmlLdZzS7H7R5Zc/yX+P50sPKZElMys+YhSVdUUBES1RKdzyd30aBZbZUKt9ya1udzkDPwavpOXg1sc9sOPcfPqV550X4F8/H7v2XARg+cRNAlgkJgCwTdaYRGB/Gx3+uJSghnPtJUXQ/tZzz0elRPIX+NCJ1L+YnlTDH9LA7hquzhjMbxlDKL/0vfM+2tTj705hsxSnFaCBOp2XSkOY0a1gOncmI0Sx93lLrLNE7i69Jt4/V3fYdr4J9Q3tZP2mExMRRqaBl1rlzUHcWHD75Su6VmUdPB/Igsh23H1dHrfIln8coKhQNIyphsaSdSRgxmi1e6mZhCeGSNrM6GfEpPz/saL3+f0aeQf1FvF3akqS7yJPENZT2WcXT5O0U8ZxAYMQpbj7pRCmf71CqLPnoNq8caLU37TlwhR6DVxH2OI6ju8egUilp1HYum3acJzEpfUlnNgajULiREjsclUN5nPJYduL0+uzjEi0LOko9n1LcT3pKkwLlcVFpWH7nKDXzPrOFCAMoXVC4f4pI3ZbtWC+Ki9qBGG0KRdzyYDSb0ZtNOKrS/xYeDr3L9W4j2f8g6LnHnPnlHiZNacf3y45Qu24pqmaRb09nkP5c9M9mrd6uLlwOfbZPwHcAACAASURBVEztEkUplteTT3LwhXpZivistFvun/+g5NpR5UFZzw8sz2hO+r83hmfJq/BVeAWf/0ti4pJtytZtOSO51iWuECmxY4Uu6Udh0L6YB/S9xEghhBBak0HMvP6ziExNyLFPxaXfiCvh4VnWl1g0/7nuffChxZfLYDIJg8kkiv04SxT7Md2vqPiPs4TJbBamDD5FRjv+RWmM+mS9EEKIDzt+I+Jik8XsmXtFbExSlu2FEOLi9YciOjZZtO69VHQY8P1zPXdGDmw8I1oWG2m9blF0hAh/aPH0X/nlbtGh/ASbPsumbBfda3wu+r71pd3Pb9vOWdseCRsmfrpT64Wf6zVC9oPKTeh1RqYP+pF6zStTp2l59qw9RdX6palWv7Td9mkpzjPS8wPpFrrGLaNt48Uo4WZZmjkq1XxaqY0k2qQ9Ptqzi71de7Ds/DncHGtR0svibxSv0xKZlGxdcgbHpueVS2uTmVOPH9LcrwxhyQkUdvXgSPv+lMxjifn05qZvEIDWZMRFbdlUSNDrMAkzeTRO2aYTL1jYizyeLowa24qQh0/xzJAtOTNqlYpTF4KpX8PfJjvz89Ciax0Czt9j+/KjdBrclFmbh5LyLLzyjhW/cyBkkU2fj7/oyMdf2Mb/AhjZbiFe+TzY9aA1DkrLc3toirEv5AObtkKYMJhT6VBi/ws/938J+bDwK2TG0HW837cBpw5eZ9Bn7/HFx2sZObMTHtn8EuUGolNSaPjjKtZ36EQpb4uI/HjlEj9cvsTGjp2pmC89DZb/4gXcG2E5PFx75fecGzDI7ph1ti6zZkg+1mEgIYlxVoECi+0poPso9twLpFvZqs8tUK+CFO1RXJya8jjyPQr57gXMpJtjLUZuk9FMG//ny2qTWah2//AHRUr4UuNZ7PU0Br09i4nf9qJQGVccVR7oTHEoFGprLr+MmIQerTEaVwf7DqGvCXK4ldzEZ0stRtlKNUoA8Pl3vZ+774C3Z0mu/SsU4vi+K5KyTRe+oGsNqRd4p4FN6PdpW5vxZny8hge3wln1uyXu0dLPd/Dn0UDWPksQkBEXjYaAoZ8ggHuxMZT08mZ4rTqMqG3rQFnWJz2a6NOUrJ010+J5A+hNJu7Fx1AyT160JiNOKss/O1cHDeZnfyB3BQfQrWyVv12cABw1VUjV/oEQqZjNiSglAvEs/bzaIlj2ZkkZaelne36uVfd6dKwwEQdHNTsD0zcBUpK0uHo44aiyeN0nGyO4Gv0d4Snn8NAUp43fFmtblULzuovTK0EWqH+QncHVUCudMJpTcVR5U8P3C/K7WILnP7oXyb6781CplLQsMZqVRyYy9IuOdKk2hQP3F9CyxGg8PC1LwjUnPiN/EW9alhhN73Gt7N7L1cOZ/EW8rNfOLo64uKZn2X10L5Iiz3ypnNVq+uzeyfGHDyRjjKhdlxF10kXqXNgjvmic7n2d3bT3QR9p8s86BfxI0Ovw0DhK6nuUe5YNp3w1npcRv/xCnFaLAljTsSOxqamM+l979x0dVZnGcfw7Nb0BSYAQUqgKSO+imADSlYCCqFRBRASRsqKrYkFYIiCguCLSVLogHaWIIE2UIqAEA6FILwFCytS7f1wyk8lMQlwxDvJ8zvEcZ+beuZPA/Hjf575lzRo0Gg1dqlenXeXKhZ5/4fJz6HQRaLVhjnDKyFqEr6E2BoPaHbdabXToeT+H9xznnWdn4etvRJPvruoHa4bTY7j779/oY2Dl0QnMHLuSFztO5P0Vakss+0YOAcHObn0Jn3t4qOyUIv/cdyMJqGJk0AbQIW6r4/HSo7VJqrC3yOdr89wJM5vUelLewZ/nTl2h9wPvsDZtInq9Fp1Bx4Uz6ditdtDgWAFh/Iuf8+3yPbR5ojGD31Wnkcx+NAlQ60ue6koWm43eXy3ll+edo7RL+ju/bI+P/ZxFozwPVwAIMhZ9qV2ApsM/xG5X2DHRfRxYdEgIO0+d4t4INWBXpaSg0WiwKwpNy9966yaz9Qgx4YtIv67OWTSZ92PUV8Rmv4zNdAVfn4bo9ToGvt0FgM93v+k4N/1SBk/WfZ0SkcHoDXqeGNyqwOv0udmytVps6A06sjJN+Af+sd/D3U4C6m/UPGrO/33u55PWEVvFtQsQEOTr8nj/jlQGtnmPuKpluadODHa7Qu8H3sEvwJfVqe85As9ks1L3448co65z3TCZODrkJWbv28uHu3c5wmnP2bN0WTSfmY90chx75PRFl3NrDZpEQfZ94BycuWjrfh5vVtPl9bTzV8jMMRPo58P9I6a5vPZ98kAuZGbSpXp1dDe7g+t++w2jTodWo+G1DRuY2r7wgY8xZdSuc1iw+jl8jDULO9zhwukr9Gz8FrO3v05kuaJNWJ44bB7rF//A2pPvo9gVxzIu81Ibotf4QiFd2rL+Tbi/9LtFus4/lQRUMdhyui+XctQtsJcdrUtccGdqhb9CCd/7Cjxn7AtzHTWoNnHuxdol079l/ELX0dD5B3bWbVaF16erU1hm/mcVx1POMuazAdS537UL5KPTc3DgC+w8OwAFG5H+DxIf4mwN9apVm161nCPW65Qp4yiUF2bZa+41uE5vu4byuws3seXAMT4YqIadojiPmTusK/Gl1cJ6rUGTePMptbXyXIMG+Or1rDx8mNQrV/jiMbUVaLXbHXMg/6xDu48xvLPn7levJq5LBn+65d+UzbPTz8YvdzNx+HzsNjsj3n+Klya4r0ARaChHxxjPyyMDKNiZn+peA7zbSEAVgweiPgVgZVozRxdv+bFGPBK/s8BzRk3twYDXO9G9wRuOGlReiqJQ7WYxvqji7ynrFk55VS0xiBCfezmV8dUfet+CxEXeupWxcnRvOoyeBaiDLBsOnUrfVg1o3/AeOr09h92TB9Nw6FTuLR/JI43UuX9xYWptrX99152Jb1c4AVSrH++xQN6x4nBWpL5X4Hlv9JrOvm2/MWPzK5SJKVXgcXnNS23oGKg5P7UxpXxr0LLcdCoG//FNXP9pJKCKkYJzLl6HuK2sPp5Iu9iNBR6fnWUq8LVKNcoxsts0khd6nlNmMVs5dfQCAx4ez4kj53hsQAJ2m7Osfe7kZXo/OIa1aRMdz4X6VAegfFBSkX6e/N243McjOj9YpPMBokuFsn2CWmfyMejpkViXFzqqNw5a1q5M/SFTiC4VyryRntfBOpx2nqpx6qTaIeOXMnlk0T77X+XN2f3dnjv52zlOp130cLSTotiYf7QJTSPfJiZIbSk2iLj1zjP/dBJQxah+hLOeoNUYqBpW8PZJs8avZv/23wAY9ZT7HLX3l71Iu4rOpVkmj1rEugVqiyy3tVWpRjnaPtmEFkn12bftCIv/u8mlJXZv3VjH/z89fI6jPgLwyZju+Bj12O0Krft8SHjJQHwMerJNFuZP6g04a0mvzFnLmt2HXWpLyV9+V2gdKi9/H3Ww5qRlWzh27gr1hkzGarOj02oZ26sto2avodagSYT4+5JYuxIVypTkyeZqlzO+nNoFtFht2PPM95u7fx89aqqTlB+eO4c5SUmUDgyi7n+nodNqyTCbCTKqk7y/7tGLQIMBg07Hy+u/YVzLVhy9coUKJZwtwNzhBHnrfm/s3ECW1UKFkBJUDi1FQrTnbaieTRxH/L1RjF+UW/BXAAWz7ToGnbr1lkajo1Psavz0pVCwY7VnYdDeeluufzoJqGJUJqA5ObbL+OrUL1WFkCdcXh/QyrksSmKnesRVLcN/hnzOwDc707+F6zip3AL31jX7ada2Jt0Ht8Jus/PEoJaULu++S2+95vewNm0imTeXbvHxM6LPswnn9He688Jbi7DbFWaOc9aftFoNvj4GvpjQC4D7u00kvzW7D3v8eXNbRnk1GeZcCiZvgO37YChp59OpEVuaUY8/RFTJEBZt3c+o2WvY98FQ7IrCsu0H+XLbAVbu/MURUIPGfYndbufc5QyWTlDrbQqw9+xZetSsxZNfLqZhdDk6zZ/Pjn79+WnAQAD6rfiKTzq6dqGW/foLJfz8+Orwr+rPrtE4upOeuntGnZ5QHz/WpB1hi/F4gQGV/1ybYsGumFmS1hKdRg3JeakN0WvVnaPtig27Ypb5eUhAFSurPYu0a4upGtYPjUbH0qN1SKqwx/H6f78Z6RgHVb5SJN8s3kWlGuWIrhDh8f0iosJY/cV2mrWtSXiZUIaO78bBH46ScS0bXz+DxztEil0h60YOFWu4LxJ3I8vMgvd7uz0fWSqIp4fPcdmM05N6QybTqGoMHzynfvFzW0YFyW1x5QbVlAGPUGvQJD5avcPluLxB1uX++1y6e9Nf68ro/66jfJkwxsxYz5vPtUGDGlBTd+2kW/UaDP/ma1JecG4r32TGJzQsV472X3zGiu5PodVoeHjuHAKMRn65eIF7b46ct9ptrOhe8NCJV+s3B2Bo7aYuz885+hg9KxQ8AVsD1C01jOhAdQ2veakNaRH1ERtOP0edUi9SNfSJAs+920hAFaM1J1pitWdxT4kBAI75WAX58pPNvPZf98BQFLVIfuF0Og92cF0P6t3n56IoirrRpaflWhTIvJHDzM2vuE3B8RROdrvCkJ7NqV65LODegnrx4xXEly7JsXOX+XHyEGoNmlRgi6oo9k4d6sjVdT+l8PKsNS5dR3O+NbVemuAs6Neo6DrsQqPR0L5KVT7/eT8z9+6hy73VaP/FZ2x/ph9D161l1ZNP02zmDLb2eYave/Sk47wvmNS6jeP8puWdKyYoiuLSBc77eFrKQzxb+RvHCpg2xVLoz6jVGLlsOuQIKIAIvzp0r7iLtad6cCh9Np3jvi70Pe4WElDFwKaYWH+yE+1jN/PVsQa3PH5t2kSybqiTUps87L6KpMVkoW38MIJC/enzL9cxP/PyDCr8I54fvdDl8fQx3VEUhe5DZ7N4qnO5Wrvddfz45gNH2TL+OR4YqdbJFr/yNOXDQ2FO4WOhClL7Bfdz8ncF85o47FF2HThBuchQSoU6A7d/vXokxMWjKApDGjXmX+u/oU/tOmzp41r323rz8Zgt39GlWjV+uegsZj8Y67xLmhtGVqsds9mCv78PVqvNMVB2Vmonnqm06ubRhU8tnZ/amBBjPLVKql3gxChnjbFN9Fy+PTOkoFPvOhJQxeD3G+vQa/3R3vwXNsNy3O2YvHfTALrUfJXO/TzvBmM2WVmRMh5Dnhn6505dIeNqFj6+Bs8tp3ysFitZN0yOoQp560555Q0ngO2LnDsEP/ivjwj08yHY3zlAtFJZ5631/GECtw6tW7WgPEk5cYEr1zNJO32FgY/fD0D3Gvex+XgaA1etpEOVKo4gymWyuq7s8OoDD/Lpnp/YdvKk47m+deribzDw4UcbycoyMWJYW/6TvIojv50jK8tMbGwpksd1A6BReD+OZmyhQtADhX5WgKS4NfjowgpdkC73tbu9DiUBVQxigh4hOrAtK9PU2+9BhthCj+/e4A10Wi3PvKJOlWgT9xIRUc55dWaTxSWcADav2MNXM7dg9Cmga5ePxWwlO9PEskPjGPXENGw2O0+++DDvDf2Cz3aNBuCNaWu4kH4DnUZLyvHzrJ/uOqRhfJ921K8cfctrFVWDF6e4deHAPdTyB1aP9q7joXI1j42jeaznsWLT2rtPsO5bpy5969R1eW7mrC08/5w6//D5F+bSu1cznn+uBUFBvoxPXu04rnroI0xLSSC39TQtxfmPy2Mx0wn3dS6546NT/yw7x61z/L8nJlt6ga/dLSSgiolWYyAxej5nMjdjV6xoNXoUPC/bO+8H125a3tZV/pZWrm7Pt6Db8y0cj7/fmsK+vSeoUrUsLVtV57vNvxJ2s+aUkZFDTEwpTpy4BED6xesYfQyUKh1Kq8ed/6pfvqouZRzob3TM7s+rYZVbz3u7lXPp6qoHqWcu88P7rjvOrNh5iNc//+aWLai/Up/ezhbRh1N7uLw26mXXkBtYZRMAM1MfoU9F527Ci088y2MxH7u9t14DJy52BTTEhC/AZEnFx1CR69mrCfZrV2h43S1kPahitu/iu9QKV7fStilmx23mO12tQZNcgqQoc/F+TjtLjwkLHM9HlQzhg4GPOkagHzh+jt1HTtGnlecWUl4TfvqeYKMvAQZDkZZsMdtsXMrO4qW6rnfgYmYk81XHp6gdUfSlTqalPMTAKt86HucPKE8uXZ9Ctnkv0aXUUfRZpt34+9QHFGz2K+i07kNF7kCyHtSdJjecALdwSr3+NRWDC98p5U5yqxpUz4kLaFf/Hsb0bA3A1BXb3ObqAUxZ4brBQWigH5vHDXA9Zu8O/PQGddJwvu9FuimbAIMRY549Cs12G5kWs0tApV69DPCHwun/5Wusgc3uXDPL36c+Jy8+iYIVDUbKh3/2l3+GO4G0oP4mZzI3UTYgAQCT7RppN7ZQObi1o5AuPMvINqEoikthvjDLj/7K4G9XceKZW+/I3HnlPAxaHWOatsSOgsVmI8tqoV5kFDEzkj2e4+l9P/mtHf0qrfZwtNO1zCX4+dTmXPrrgIKv8T5yzAdQUIv3MeELCz3/DiEtqDvF0qPqeKWkCns5dn0x8cHqDPyUa6vIsV2jZonunLixjZjA+//Oj/kHKJy6sYUs60XsWDiRsYnW0c4dTRITxhbpXcaMeYxGjdVNOs+evUpy8mrefLMzfn5G9Hot69cfZNqHG1j21YsoCugU8C9iOAEM/nYV/27YvEjH/nhe3TcvYcmnLs/nhlD+MCootDyF07hfnyDEEIGfLpBQYySPRqn1tvLhXxTps92tJKCKSYe4LQDsOj+C2KAkQGHDqceJC32WeP+67Lw4ldol3AdKei8N0YHOScH3hD7BgdSzjsGSGze5T3Rt2yaZNWsLbsmMHLGAt9/pworle7Db7Y6pOI93bcj8+Tuw2xSysk30K2D4RX7NFqqB2bDMre80Lj5yEFBDKO1aOs0XzyhSqwvUgZmZ1ksE31yi92LOEcKMMWg0GjKtlwk2lKG0bzwPhD/OlouLqBWqtpzXnx1LyzIyIbgwElDFrGFkMivT7qdaiRdoHjUbsz0bf30pqoR0YPXvg0mKmfV3f8T/S9935nMjy8wb/R7m3rjSbq8ndXqfiIiQAs9ftWofZ86kExtbitjYUiQmjGXy5Kddjhky5DOPwedJ7Ixk6pcux8mMq4C6VlSFmRPY2rUf5YPctzxvF1+FRyqomxycuH61SNfIpdMYsCkWpqU8RLty47hsOsrZ7IPcsJ7n98w9+OgCsSlGNl9YQEmfMkT5qUvetCwzimUn1TrdDeslAvQlSCo/ubBL3XUkoIrJNbO6MkGAvhwd4r7nh/MvEx/SlQPpi4kKaMCRa6sI0Iff4l2816f/Lnj+2PuT1hEZGUJ2toWWLcYx8l/tadmyussxkyaupWZN12ELQ4b8f4XiCjMnEGT0YXH7JxzdML1WS6My0TRb+AnrknpxTwnX3/WhS+cJNBoxaHV8f+Y4oT6+pKRfIstiJjak6Lf7c2zXsNizqFEiiV+uraJl2de4aj5JdEBD9BoDN6xXMWidN0dCjFFcyjlKoL5oa0fdbSSgikkpX3VTgBzbZXaff4X7SqojsquHPYZOYyQiciQ7LhS+g8id6KNpG9m27QjTPurNiOHzWb/hZRITxnL6dDq9ejVzHNe9e2MOHVJrQKmp5/n45kqg+aWmnqdixUiPr5lsVirPmoS/3sCBHoPdXl/YrhuJS2bSeulsNnbpQ8VQ5638nl9/SYDBgF6r41xmBv56Az3XLSHLauGjxI6F/oxXTGloNGp3VIOGysGtOJ21h5phXUg3nyTuZl0xy5bBrssrqRhYl5iAewFIKD28wPcVElDFzldXkvqR73I28zvK6B/kfPYhTmRupWnEMKxKwQvU3Yl6956O2Wxj8ZLBXLzovKW+cdMoEhPGYjZb6d9frSf1faY5Lw1VC8bP9p/JuHFdPb7nyy8v9NjNm3VoD6N3bKRyWCnWdy64lrexSx9qzJ1C4pKZLt29X3o657/FzEjm01ZJNCpC7Qpgx8XpnMz8gRBjOTafm+D4cyztV42HSo90HOej9SMx8umC3kZ4IAH1NykToBaYywU0oFyAOoG4WeS/CjvljpKYMJZOneox6IWWHl/fsHEULVuMdQRUXqtWD6Nz0mTMZit5R8EYDDpWrR7mdjxA8o9bGd04kd7Vbr191YEeg7nvs6kea1G5+/Q9uXYRR/t4vlZ+7cqNRUHh4yOtGFB5PRdyDhNmjMGg9cOuqMMGMq3XOJyxi5+urEMBnq3geUaAcCUBJf4StypmazRqSHni52d0udvXscNErnUMxs/Hh8cWL2R869asT03FZldX3RzUuJFLC6gofn76BY/Pt/tqLvEhJehWpQYxM5I51HMIgQa1ZlTQsAJQa0+JpV8m5fo3bDw71jHtRau5uUmpPoRqwU35+epmHoseWeD7CFcSUKJYKIrCrQYF22x2bDY7Op37vL8nat5HmJ8f6478xr0R4ZTw82Xqzl00KV/esf3Un3XNlMMvly9w/JkRaIDrZhPV5kzmWF+1TpS/rlVjrrrrS96JwbnUicNOA6t8i68ugN5xd/c2Un+UBJQoFjk5FnJyCl/ILTvbTFaWmaCb+/vNm7eDBfN3EBzsx6lr14gKDibYV9348r3vt+Gj17Pz1EnaVSl8J2GLzX2FBE/u+2wqI+o1cwx/HlGvGXEhYY4ADC5g89GBVb7FbM/iVOaPxAU2YdO58Ry5vp7ucXMJNd6+1R7uRjLVRRSL3bvTqFcvzrHWU/4VKj21nBQFjh27QIUKEczZs5cKJUvQKDqaFb8epmlMeabt2sWbiYkUJmZGMnNad6F5ucK36Go4/yN1iEFX911ZAI5evUKF0KJt1ikc/nTTVgJKFJsLF64TERH8l73/7kvHiQ0sSbhvEADrz/xCasZFnqtS+DZYOy+m0SjcNcBWnjpIh+jqBZwhikjm4ok7w4gRCxg79jG3500mKz4+zr+GN27kEBjonGtXbflot3OWNH+We0LcVxww6vQkfjOJnzu+DsCre5ezroX7eKj8en//OdvaDqOEj7/jueG7l5JQpjI6jRZfnevXpNaKsWRbPXdX93UchZ9eJnzfLhJQolgkJ3dj+vTN9O/f3OX5otS3f2z/Cn469U5ateWjifJ3Hx4AUDOsHGFGZ8hkWk103eKcwGxT7Iyp/SiNw+MBGL13NQadnq5xdfkoZSuKopBhyeE/9dRdacx2K41XvcfhpNddruOnM7C97TD89a7L5dRaMVbC6TaTgBLFYt/+k/Tte+v1uj3R5Osp6DUFb3/1XWv1jtvgHxYwpvajPFq+Fq03TGFdi8F8d/F7fPUZ7EnfR52wWoyu3a7Q64YZ/WkQHovVbnfbVr3Tpk/cwjXHakHhNvRrhIMElCgWKYfPUivfXLsT168SE+zaGjKZrATm21C3KCtk5nYFw4z+rG0xmI1nDzOlQTeXY4INwejQoteqf+2TD25gxpHtLscklqnCxrMpAFRZ+hYAT2+dw/wHnaPTrXY7yxL6eWxBWew2l4XxxJ8jASWKRdeu6lrnb2//loOXLvBm0wS2/H6crlVrEOLjrDmVLOm+3behCF/4Q4+MBqDV+vcJMvg6HudVO/Q+l8dhRn9m3f8UTSLULl+VpW8xrbE6xabRqvfY2d7zPLkIvyCSvv3E7fnSfsHk2CwSULeRBJQoVm3iK3PkyiXiQsM4cyPDJZwKkr+LVxitRu2KZVhyCDT4uJxrVxQyrSaCDOo1s2xm9l85jcnuugWVTVGoFBxOlaVvkZKn/vTIxo85fO18odevv1Ldvj4lX91K/H8koESxqlc6is/aq3fzEmLi/7Lr9Nk2h0CDL1qNhos5GfTdPhebYifDksOXzdX1zJ+Mr881czYTDm1iWLUEVrd4DoAdF47RLLIiB9LPuLzn8sRnAbhuycFXZ8Co1dHy66msf9jztBnx50lACa+18PiPjtaOJ9ct2QQb/Nye33flFIubP+t43HrDFD5t0sPtuB8vnWTCoY3UKRlNoMGHhHVTOPjoq0w8tInPH+jJtJQtHq874eBGNBoNo2u1BZy1qlzSerp93Cc9CeEl3tq/iuUJAwt8/csTe2m42nXt82vmbHpvc98ZxpPBuxbzTSt1+/EI3yAqBYfzc/ppDl0961IAz7G5dgEXpP3E8pM/Ox6nJL3u8p+4faQFJbyO2W6l9sp3aB1VjUhf15HnFYMiqL/6Xfx0RrJtZmY17el4bcgP6k4oezv82+UcRVFQUNxqWa/VbANAhkVdv2lZQn8arkpmbjO1tWW+OYev5vJ3HcHTZv00GpSKYUSNFlRZ+hZGrY5DV89SNaQ0Oo0Gm2LnVGY6FruNSsERt+tXcteSgBJeR6fR0iSiAhPquY88L6xFNbmB50XuMqw53LCY3LqLT1WoT4NVydyw5ADw9v611AiLomF4LABVQyK5b/m7TGnYBYDBu5ZwISeDtS3Vz5CS9Do/XT7JB79+x97Lv3PVnOWYsyUtqdtD5uKJf5xJR8Zispu4brlGp6jHSctMJcK3DGmZqfSOHYDFbOPUyUv4+/sQWToEjfb2DK1UsKNxVE0Ujlz9grNZ26hVahghxoq35Rp3mD/9i5UalPjHsSoWHopoSaOSTUm3XEEdqKChhEFdgzzt6HmmjFvDybSLZGbevmWWNS5fJw0KCqX9m3A4ffZtu8bdRlpQ4h/nouk8n52YAcBLlV9lye/z6FA2CaNWHRd1/Vo2/gE+nD51GRSIib99u+kcz1hFCZ9qBBvjSLk6hwB9FFGBCfnC664hqxkI4c71exHlF8201EnoNDoGVxpJcIg6NCEm7vZu85Vu+oVgQywmWzqXcq5yPmsX6ebDWJUcYoPa39Zr3S2kBSWE+KtIDUoI8c8lASWE8FoSUEIIryUBJYTwWhJQQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQzTIM0gAAAVtJREFUQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQQgivJQElhPBaElBCCK8lASWE8FoSUEIIryUBJYTwWhJQQgivpf+7P8BNmr/7AwghvI+0oIQQXksCSgjhtSSghBBeSwJKCOG1JKCEEF5LAkoI4bUkoIQQXksCSgjhtSSghBBeSwJKCOG1JKCEEF5LAkoI4bUkoIQQXksCSgjhtSSghBBeSwJKCOG1JKCEEF5LAkoI4bUkoIQQXksCSgjhtSSghBBeSwJKCOG1JKCEEF7rf0qkv/aPvEptAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<wordcloud.wordcloud.WordCloud at 0x7fc4a4f98588>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "import PIL.Image as Image\n",
    "\n",
    "alice_coloring = np.array(Image.open(\"wechat.jpg\"))\n",
    "\n",
    "my_wordcloud = WordCloud(background_color=\"white\", max_words=2000, mask=alice_coloring,\n",
    "                         max_font_size=40, random_state=42, font_path='./SimHei.ttf').generate(wl_space_split)\n",
    "\n",
    "\n",
    "plt.imshow(my_wordcloud)\n",
    "plt.axis(\"off\")\n",
    "plt.show()\n",
    "\n",
    "my_wordcloud.to_file(os.path.join(\"wechatfriends_wordcloud.png\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 任务4. 对好友签名进行情感分析\n",
    "\n",
    "在这部分内容中，我们调用了[SnowNLP](https://github.com/isnowfy/snownlp)的情感分析，它是一个python写的类库，可以方便的处理中文文本内容，不用我们实现其中具体的代码。一般来说，情感分析的目的是为了找出作者观点的态度，是正向还是负向，或者更具体的，我们希望知道他的情绪。\n",
    "\n",
    "在这里，我们希望了解到好友签名所表达出来的情感是积极的，还是中立、负面的，比如说在以下例子中，我们对\"这个商品我非常喜欢，颜色很合我意！\"这句话进行了预处理，并通过训练好的模型预测其的情感。\n",
    "\n",
    "在这里，我们简单地假设大于0.66表示积极，低于0.33表示消极，其他表示中立。\n",
    "\n",
    "运行以下代码试试看！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.6851400314498396\n"
     ]
    }
   ],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "from snownlp import SnowNLP\n",
    "\n",
    "text = \"这个商品我非常喜欢，颜色很合我意！\"\n",
    "sentiment = SnowNLP(text).sentiments\n",
    "\n",
    "print(sentiment)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，我们将好友的签名进行文本预处理，并尝试统计其中积极、中立、消极的个数。\n",
    "\n",
    "### 练习：统计好友签名情感分析结果比例\n",
    "* 统计sentiments中大于0.66的个数\n",
    "* 统计sentiments中大于等于0.33且小于等于0.66的个数\n",
    "* 统计sentiments中小于0.33的个数\n",
    "\n",
    "提示：可以用循环语句或者列表表达式实现。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "sentiments = []\n",
    "for i in tList:\n",
    "    sentiments.append(SnowNLP(i).sentiments) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "### TODO：统计sentiments中大于0.66的个数\n",
    "positive = len([sentiment for sentiment in sentiments if sentiment > 0.66])\n",
    "\n",
    "### TODO：统计sentiments中大于等于0.33且小于等于0.66的个数\n",
    "neutral = len([sentiment for sentiment in sentiments if 0.33 <= sentiment <= 0.66])\n",
    "\n",
    "### TODO：统计sentiments中小于0.33的个数\n",
    "negative = len([sentiment for sentiment in sentiments if sentiment < 0.33])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 以下内容无需修改，直接运行即可\n",
    "labels = [u'Negative',u'Neutral',u'Positive']\n",
    "values = (negative,neutral,positive)\n",
    "plt.xlabel(u'Sentiment Analysis')\n",
    "plt.ylabel(u'Number')\n",
    "plt.xticks(range(3),labels)\n",
    "plt.bar(range(3), values)\n",
    "\n",
    "plt.title('Sentiment Analysis of Friends signature')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**注意: 当你写完了所有的代码，并且回答了所有的问题。你就可以把你的 iPython Notebook 导出成 HTML 文件。你可以在菜单栏，这样导出File -> Download as -> HTML (.html)把这个 HTML 和这个 iPython notebook 一起做为你的作业提交。**"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
